Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The following excerpt shows how this channel binding is configured using XML:

Code Block
xml
xml
<composite name="ProducerComposite" ...>

   <component name="TestProducer">
      <implementation.java class="..."/>
      <producer name="channel" target="TestChannel"/>
   </component>
</composite>

<composite name="ChannelComposite"...>

   <channel name="TestChannel">
      <f3:binding.zeromq/>
   </channel>

</composite>

<composite name="ConsumerComposite" ...>

   <component name="TestConsumer">
      <implementation.java class="..."/>
      <consumer name="channel"
source="TestChannel"/>

  </component>

</composite>

Consuming External Event Streams

...

Code Block
xml
xml
<composite ...>

   <channel name="TestChannel">
      <f3:binding.zeromq addresses="192.0.2.1:12001 192.0.2.2:12001""/>
   </channel>

   <component name="TestConsumer">
      <implementation.java class="..."/>
      <consumer
name="channel"
source="TestChannel"/>
   </component>

</composite>

Publishing to External Event Streams

...

Code Block
xml
xml
<composite ...>

   <component name="TestProducer">
      <implementation.java class="..."/>
      <producer name="channel" target="TestChannel"/>
  
</component>
    <channel name="TestChannel">
      <f3:binding.zeromq addresses="192.0.2.1:12001"/>
   </channel>

</composite>


...

This is useful when receiving messages from external ZeroMQ publishes that send multi-frame messages.

Performance Considerations

When using the ZeroMQ binding with channels, it is strongly recommended to use ring buffer channels as described in the next section. Ring buffer channels provide low contention and allow business logic to be isolated on a thread that is separate from IO operations. If ring buffer channels are not used (i.e. default channels), ZeroMQ consumers will be invoked on the same thread as the socket read. In some situations, this may be the desired result and perform adequately.

In addition, it is highly recommended to use the bytecode proxy generation extension (Maven coordinates: org.fabric3:fabric3-bytecode-proxy) to avoid the overhead and object creation associated with JDK proxies.

Port Allocation

The ZeroMQ binding attempts to acquire ports for sockets from the block configured for a particular runtime or zone. For information on how to configure a port block, see Port Allocation.