<!DOCTYPE html>
<!--
 -
 - Licensed to the Apache Software Foundation (ASF) under one
 - or more contributor license agreements.  See the NOTICE file
 - distributed with this work for additional information
 - regarding copyright ownership.  The ASF licenses this file
 - to you under the Apache License, Version 2.0 (the
 - "License"); you may not use this file except in compliance
 - with the License.  You may obtain a copy of the License at
 -
 -   http://www.apache.org/licenses/LICENSE-2.0
 -
 - Unless required by applicable law or agreed to in writing,
 - software distributed under the License is distributed on an
 - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 - KIND, either express or implied.  See the License for the
 - specific language governing permissions and limitations
 - under the License.
 -
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
    <title>Discussion - Apache Qpid&#8482;</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
    <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
    <script type="text/javascript">var _deferredFunctions = [];</script>
    <script type="text/javascript" src="/deferred.js" defer="defer"></script>
    <!--[if lte IE 8]>
      <link rel="stylesheet" href="/ie.css" type="text/css"/>
      <script type="text/javascript" src="/html5shiv.js"></script>
    <![endif]-->

    <!-- Redirects for `go get` and godoc.org -->
    <meta name="go-import"
          content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
    <meta name="go-source"
          content="qpid.apache.org
https://github.com/apache/qpid-proton/blob/go1/README.md
https://github.com/apache/qpid-proton/tree/go1{/dir}
https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
  </head>
  <body>
    <div id="-content">
      <div id="-top" class="panel">
        <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>

        <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>

        <ul id="-global-navigation">
          <li><a id="-logotype" href="/index.html">Apache Qpid<sup>&#8482;</sup></a></li>
          <li><a href="/documentation.html">Documentation</a></li>
          <li><a href="/download.html">Download</a></li>
          <li><a href="/discussion.html">Discussion</a></li>
        </ul>
      </div>

      <div id="-menu" class="panel" style="display: none;">
        <div class="flex">
          <section>
            <h3>Project</h3>

            <ul>
              <li><a href="/overview.html">Overview</a></li>
              <li><a href="/components/index.html">Components</a></li>
              <li><a href="/releases/index.html">Releases</a></li>
            </ul>
          </section>

          <section>
            <h3>Messaging APIs</h3>

            <ul>
              <li><a href="/proton/index.html">Qpid Proton</a></li>
              <li><a href="/components/jms/index.html">Qpid JMS</a></li>
              <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
            </ul>
          </section>

          <section>
            <h3>Servers and tools</h3>

            <ul>
              <li><a href="/components/java-broker/index.html">Broker for Java</a></li>
              <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
              <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
            </ul>
          </section>

          <section>
            <h3>Resources</h3>

            <ul>
              <li><a href="/dashboard.html">Dashboard</a></li>
              <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
              <li><a href="/resources.html">More resources</a></li>
            </ul>
          </section>
        </div>
      </div>

      <div id="-search" class="panel" style="display: none;">
        <form action="http://www.google.com/search" method="get">
          <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
          <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
          <button type="submit">Search</button>
          <a href="/search.html">More ways to search</a>
        </form>
      </div>

      <div id="-middle" class="panel">
        <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li>Discussion</li></ul>

        <div id="-middle-content">
          <h1 id="discussion">Discussion</h1>

<p>Have a question or an idea?  We'd be pleased to talk about it.</p>

<h2 id="mailing-lists">Mailing lists</h2>

<p>Mailing lists are the primary means of collaboration at Qpid.</p>

<p>Subscribe to these lists by sending an email with the word "subscribe"
in the subject to the subscribe address.  To unsubscribe, it's the
reverse: send an email with "unsubscribe" in the subject to the
unsubscribe address.</p>

<table>
<thead>
<tr>
  <th>List</th>
  <th>Purpose</th>
  <th>Subscribe</th>
  <th>Unsubscribe</th>
  <th>Archive</th>
</tr>
</thead>
<tbody>
<tr>
  <td><a href="http://mail-archives.apache.org/mod_mbox/qpid-users/">users@qpid.apache.org</a></td>
  <td>General discussion</td>
  <td><a href="mailto:users-subscribe@qpid.apache.org">users-subscribe</a></td>
  <td><a href="mailto:users-unsubscribe@qpid.apache.org">users-unsubscribe</a></td>
  <td><a href="http://qpid.2158936.n2.nabble.com/Apache-Qpid-users-f2158936.html">Nabble</a></td>
</tr>
<tr>
  <td><a href="http://mail-archives.apache.org/mod_mbox/qpid-dev/">dev@qpid.apache.org</a></td>
  <td>Issue notifications</td>
  <td><a href="mailto:dev-subscribe@qpid.apache.org">dev-subscribe</a></td>
  <td><a href="mailto:dev-unsubscribe@qpid.apache.org">dev-unsubscribe</a></td>
  <td><a href="http://qpid.2158936.n2.nabble.com/Apache-Qpid-developers-f7254403.html">Nabble</a></td>
</tr>
<tr>
  <td><a href="http://mail-archives.apache.org/mod_mbox/qpid-proton/">proton@qpid.apache.org</a></td>
  <td>Proton. Going forward, use above lists.</td>
  <td></td>
  <td></td>
  <td><a href="http://qpid.2158936.n2.nabble.com/Apache-Qpid-Proton-f7580687.html">Nabble</a></td>
</tr>
</tbody>
</table>

<p>Qpid also offers lists for
<a href="/source-code.html#commits-list">commits</a> and
<a href="/source-code.html#notifications-list">notifications</a>.</p>

<p><strong>NOTE</strong>: The Qpid project offers various components in many different
languages. When mailing the lists, please be specific about which
component, or even which part of a given component, that you are
using. For example, "I'm using the Qpid Broker for Java
&lt;version&gt; with the Qpid JMS &lt;version&gt; AMQP 1.0 client"
rather than "I'm using the broker and JMS client".</p>

<h2 id="chat">Chat</h2>

<p>We hang out on <code>#qpid</code> on <a href="https://freenode.net">freenode</a>.</p>

<ul>
<li><a href="irc://irc.freenode.net/qpid">irc://irc.freenode.net/qpid</a></li>
<li><a href="http://webchat.freenode.net/?channels=#qpid">freenode webchat</a></li>
</ul>

<h2 id="more-information">More information</h2>

<ul>
<li><a href="http://www.apache.org/foundation/mailinglists.html">Mailing lists at Apache</a></li>
<li><a href="http://qpid.2158936.n2.nabble.com/">Qpid lists at Nabble</a></li>
</ul>


          <hr/>

          <ul id="-apache-navigation">
            <li><a href="http://www.apache.org/">Apache</a></li>
            <li><a href="http://www.apache.org/licenses/">License</a></li>
            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
            <li><a href="/security.html">Security</a></li>
            <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
          </ul>

          <p id="-legal">
            Apache Qpid, Messaging built on AMQP; Copyright &#169; 2015
            The Apache Software Foundation; Licensed under
            the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
            License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
            Proton, Apache, the Apache feather logo, and the Apache Qpid
            project logo are trademarks of The Apache Software
            Foundation; All other marks mentioned may be trademarks or
            registered trademarks of their respective owners
          </p>
        </div>
      </div>
    </div>
  </body>
</html>
