Hello group members. I'm having problems with clustering/federating an application's Artemis embedded server. The application is a .WAR with Springframework 4 and Embedded Artemis 1.1.0 (from Spring).
Multiple instances of the application are expected to be deployed in multiple spots. The Artemis component is expected to cluster a JMS Topic between nodes so that if any node sends a message on the topic all listeners on all nodes should receive the message. With a few problems I was able to make the Embedded Artemis Server handle topic in a single deployment. Every application connects to the Embedded Artemis using InVM connector. Trying to cluster instances does not work! My configuration contains: - A NettyAcceptor on (host):(random-high-port) - A NettyConnector on (host):(random-high-port) named "cluster-connector" - A BroadcastGroupConfiguration named "cluster-broadcast" = UDPBroadcastEndpointFactory * group-host 239.1.2.3 * group-port 12345 * local-host (host) * local-port (random-high-port) = ConnectorInfos * "cluster-connector" - DiscoveryGroupConfiguration named "cluster-discovery" = UDPBroadcastEndpointFactory * group-host 239.1.2.3 * group-port 12345 * local-host (host) * local-port (random-high-port) - ClusterConnectionConfiguration named "cluster" = address: "cluster-address" = connectorName: "cluster-connector" = discoveryGroupName: "cluster-discovery" The configuration is done in Java (not XML) via o.a.a.a.core.config.Configuration As already noted this does not work, even worse when a second application instance is brought up the VMs on both instances hang on attempt to shut-down. I noticed a possible problem: the network monitor showed, that the applications keep open UDP socket that has a Send-Q that continuously grows until about 200K pending, and then it seizes. Further using a tcpdump I noticed, that the packages being sent by Artemis look invalid, as they're really BIG: 4096 bytes broadcast datagrams! Looking further I found out a possible BUG in …cluster.impl.BroadcastGroupImpl in the broadcastConnectors() method. It seems the method works incorrectly with the ActiveMQBuffer and the underlying NIO ByteBuffer, and instead of sending a package with the needed data it sends the whole Buffer of nearly 4K zeros and only a few hundred bytes of actual payload. A package of 4K is next to impossible to send as a datagram packet. I've tried to perform a hot-fix for this issue and succeeded (the datagrams fell to about 250 bytes), datagrams are sent and received, but the cluster still does not form. Please advise! Is there a way to create a cluster without using discovery? Assuming I know every instance of the application at initialisation time is it possible to create a cluster of pre-defined nodes? Hope I get help.