
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>Publisher / subscriber implementation / Apache Celix</title>

    
    <link rel="icon" href="/assets/img/favicon.ico">

    
    <link href="/assets/css/bootstrap.min.css" rel="stylesheet">

    
    <link href="/assets/css/style.css" rel="stylesheet">

    <style>
         
         
        .card-body img {
            max-width: 100%;
            width: 100%;
            height: auto;
        }

         
        .card-body img + em {
            text-decoration: underline;
        }
    </style>

    
<script>
  var _paq = window._paq = window._paq || [];
   
  _paq.push(['disableCookies']);
   
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="https://analytics.apache.org/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '9']);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
  })();
</script>


</head>
<body class="light-grey">

<a href="https://github.com/apache/celix" class="github-ribbon">
    <img src="/assets/img/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
</a>


<nav class="navbar navbar-expand-lg navbar-dark bg-primary fixed-top">
    <div class="container">
        <a class="navbar-brand" href="/">
            <img src="/assets/img/celix-white.svg" height="40" class="d-inline-block align-top" alt="Celix Logo">
        </a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarResponsive">
            <ul class="navbar-nav ml-auto">
                <li class="nav-item">
                    <a class="nav-link" href="/">Home</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="/download.cgi">Download</a>
                </li>
                <li class="nav-item dropdown active">
                    <a class="nav-link dropdown-toggle" href="#" id="ddDocs" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                        Docs
                    </a>
                    <div class="dropdown-menu" aria-labelledby="ddDocs">
                        <a class="dropdown-item" href="/docs/2.4.0/docs.html">2.4.0 (latest)</a>
                        <a class="dropdown-item" href="/docs/2.3.0/docs.html">2.3.0</a>
                        <a class="dropdown-item" href="/docs/2.2.1/docs.html">2.2.1</a>
                        <a class="dropdown-item" href="/docs/2.1.0/docs.html">2.1.0</a>
                    </div>
                </li>
                <li class="nav-item dropdown">
                    <a class="nav-link dropdown-toggle" href="#" id="ddContributing" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                        Contributing
                    </a>
                    <div class="dropdown-menu" aria-labelledby="ddContributing">
                        <a class="dropdown-item" href="/contributing/youatcelix.html">You at Celix</a>
                        <a class="dropdown-item" href="/contributing/submitting-patches.html">Submitting patches</a>
                        <a class="dropdown-item" href="/contributing/source-and-builds.html">Source code and builds</a>
                        <hr>
                        <a class="dropdown-item" href="/contributing/releasing.html">Releasing</a>
                        <a class="dropdown-item" href="/contributing/volunteers.html">Volunteers</a>
                        <a class="dropdown-item" href="https://whimsy.apache.org/board/minutes/Celix.html">Board Reports</a>
                    </div>
                </li>
                <li class="nav-item dropdown">
                    <a class="nav-link dropdown-toggle" href="#" id="ddSupport" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                        Support
                    </a>
                    <div class="dropdown-menu" aria-labelledby="ddSupport">
                        <a class="dropdown-item" href="/support/mailing-list.html">Mailing Lists</a>
                        <a class="dropdown-item" href="/support/issue-tracking.html">Issue Tracking</a>
                    </div>
                </li>
                <li class="nav-item dropdown">
                    <a class="nav-link dropdown-toggle" href="#" id="ddFoundation" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                        ASF
                    </a>
                    <div class="dropdown-menu" aria-labelledby="ddFoundation">
                        <a class="dropdown-item" href="https://www.apache.org/">ASF Home</a>
                        <a class="dropdown-item" href="https://www.apache.org/foundation/how-it-works.html">How it works</a>
                        <a class="dropdown-item" href="https://www.apache.org/licenses/">License</a>
                        <a class="dropdown-item" href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
                        <a class="dropdown-item" href="https://www.apache.org/foundation/thanks.html">Thanks</a>
                        <a class="dropdown-item" href="https://www.apache.org/security/">Security</a>
                        <a class="dropdown-item" href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a>
                    </div>
                </li>
            </ul>
        </div>
    </div>
</nav>


<div class="section">
    <div class="container">
        <div class="row py-4">
            <div class="col-sm-12 card">
                <div class="card-body pt-5">
                    
                    
                        
                        
                    

                    
                        
                        <a href="/docs/2.2.1/docs.html" title="back to documentation">&lt;&lt; back to documentation</a>
                    

                    
	<!--
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.
-->
<h1 id="publisher--subscriber-implementation">Publisher / subscriber implementation</h1>
<p>This subdirectory contains an implementation for a publish-subscribe remote services system, that use dfi library for message serialization.
For low-level communication, UDP and ZMQ is used.</p>
<h1 id="description">Description</h1>
<p>This publisher / subscriber implementation is based on the concepts of the remote service admin (i.e. rsa / topology / discovery pattern).</p>
<p>Publishers are senders of data, subscribers can receive data. Publishers can publish/send data to certain channels (called &rsquo;topics&rsquo; further on), subscribers can subscribe to these topics. For every topic a publisher service is created by the pubsub admin. This publisher is announced through etcd. So etcd is used for discovery of the publishers. Subscribers are also registered as a service by the pubsub admin and will watch etcd for changes and when a new publisher is announced, the subscriber will check if the topic matches its interests. If the subscriber is interested in/subscribed to a certain topic, a connection between publisher and subscriber will be instantiated by the pubsub admin.</p>
<p>The dfi library is used for message serialization. The publisher / subscriber implementation will arrange that every message which will be send gets an unique id.</p>
<p>For communication between publishers and subscribers UDP and ZeroMQ can be used. When using ZeroMQ it&rsquo;s also possible to setup a secure connection to encrypt the traffic being send between publishers and subscribers. This connection can be secured with ZeroMQ by using a curve25519 key pair per topic.</p>
<p>The publisher/subscriber implementation supports sending of a single message and sending of multipart messages.</p>
<h2 id="getting-started">Getting started</h2>
<p>The publisher/subscriber implementation contains 2 different PubSubAdmins for managing connections:</p>
<ul>
<li>PubsubAdminUDP: This pubsub admin is using linux sockets to setup a connection.</li>
<li>PubsubAdminZMQ (LGPL License): This pubsub admin is using ZeroMQ and is disabled as default. This is a because the pubsub admin is using ZeroMQ which is licensed as LGPL (<a href="https://github.com/zeromq/libzmq#license">View ZeroMQ License</a>).</li>
</ul>
<p>The ZeroMQ pubsub admin can be enabled by specifying the build flag <code>BUILD_PUBSUB_PSA_ZMQ=ON</code>. To get the ZeroMQ pubsub admin running, <a href="https://github.com/zeromq/libzmq">ZeroMQ</a> and <a href="https://github.com/zeromq/czmq">CZMQ</a> need to be installed. Also, to make use of encrypted traffic, <a href="https://github.com/openssl/openssl">OpenSSL</a> is required.</p>
<h2 id="running-instructions">Running instructions</h2>
<h3 id="running-psa-udp-multicast">Running PSA UDP-Multicast</h3>
<ol>
<li>Open a terminal</li>
<li>Run <code>etcd</code></li>
<li>Open second terminal on project build location</li>
<li>Run <code>cd deploy/pubsub/pubsub_publisher_udp_mc</code></li>
<li>Run <code>sh run.sh</code></li>
<li>Open third terminal on project build location</li>
<li>Run <code>cd deploy/pubsub/pubsub_subscriber_udp_mc</code></li>
<li>Run <code>sh run.sh</code></li>
</ol>
<p>Design information can be found at pubsub_admin_udp_mc/README.md</p>
<h3 id="running-psa-zmq">Running PSA ZMQ</h3>
<p>For ZeroMQ without encryption, skip the steps 1-12 below</p>
<ol>
<li>Run <code>touch ~/pubsub.keys</code></li>
<li>Run <code>echo &quot;aes_key:{AES_KEY here}&quot; &gt;&gt; ~/pubsub.keys</code>. Note that AES_KEY is just a sequence of random bytes. To generate such a key, you can use the command <code>cat /dev/urandom | hexdump -v -e '/1 &quot;%02X&quot;' | head -c 32</code> (this will take out of /dev/urandom 16 bytes, thus a 128bit key)</li>
<li>Run <code>echo &quot;aes_iv:{AES_IV here}&quot; &gt;&gt; ~/pubsub.keys</code>.  Note that AES_IV is just a sequence of random bytes. To generate such an initial vector , you can use the command <code>cat /dev/urandom | hexdump -v -e '/1 &quot;%02X&quot;' | head -c 16</code> (this will take out of /dev/urandom 8 bytes, thus a 64bit initial vector)</li>
<li>Run <code>touch ~/pubsub.conf</code></li>
<li>Run <code>echo &quot;keys.file.path=$HOME&quot; &gt;&gt; ~/pubsub.conf</code></li>
<li>Run <code>echo &quot;keys.file.name=pubsub.keys&quot; &gt;&gt; ~/pubsub.conf</code></li>
<li>Generate ZMQ keypairs by running <code>pubsub/keygen/makecert pub_&lt;topic_name&gt;.pub pub_&lt;topic_name&gt;.key</code></li>
<li>Encrypt the private key file using <code>pubsub/keygen/ed_file ~/pubsub.keys pub_&lt;topic_name&gt;.key pub_&lt;topic&gt;.key.enc</code></li>
<li>Store the keys in the pubsub/examples/keys/ directory, as described in the pubsub/examples/keys/README.</li>
<li>Build project to include these keys (check the CMakeLists.txt files to be sure that the keys are included in the bundles)</li>
<li>Add to the config.properties the property SECURE_TOPICS=&lt;list_of_secure_topics&gt;</li>
</ol>
<p>For ZeroMQ without encryption, start here</p>
<ol>
<li>Run <code>etcd</code></li>
<li>Open second terminal on pubsub root</li>
<li>Run <code>cd deploy/pubsub/pubsub_publisher_zmq</code></li>
<li>Run <code>cat ~/pubsub.conf &gt;&gt; config.properties</code> (only for ZeroMQ with encryption)</li>
<li>Run <code>sh run.sh</code></li>
<li>Open third terminal on pubsub root</li>
<li>Run <code>cd deploy/pubsub/pubsub_subscriber_zmq</code></li>
<li>Run <code>cat ~/pubsub.conf &gt;&gt; config.properties</code> (only for ZeroMQ with encryption)</li>
<li>Run <code>sh run.sh</code></li>
</ol>
<h3 id="properties-psa-zmq">Properties PSA ZMQ</h3>
<p>Some properties can be set to configure the PSA-ZMQ. If not configured defaults will be used. These
properties can be set in the config.properties file (<PROPERTY>=<VALUE> format)</p>
<pre><code>PSA_IP                              The local IP address to be used by the ZMQ admin to publish its data. Default te first IP not on localhost
PSA_INTERFACE                       The local ethernet interface to be used by the ZMQ admin to publish its data (ie eth0). Default the first non localhost interface
PSA_ZMQ_RECEIVE_TIMEOUT_MICROSEC    Set the polling interval of the ZMQ receive thread. Default 1ms</code></pre>


                </div>
            </div>
        </div>
    </div>
</div>


<footer class="py-3 bg-secondary">
    <div class="container">
        <div class="row">
            <div class="col-md-8 text-center">
                <p class="m-0 text-white">
                    Copyright &copy; 2024 The Apache Software Foundation, Licensed under
                    the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
                    <br>
                    Apache Celix, Celix, Apache, the Apache feather logo and the Apache Celix logo are trademarks of The Apache Software Foundation.
                </p>
            </div>
            <div class="col-md-4 text-center">
                <a href="https://www.apache.org/events/current-event.html" target="_blank">
                    <img src="https://www.apache.org/events/current-event-234x60.png" title="Apache Event" width="234" height="60" border="0">
                </a>
            </div>
        </div>
    </div>
</footer>


<script src="/assets/js/jquery.min.js"></script>
<script src="/assets/js/bootstrap.bundle.min.js"></script>


</body>
</html>
