Create topic/queue on all nodes of symmetric cluster
raivil Sep 16, 2014 2:42 PMHi,
I have a symmetric hornetq cluster. My Application creates topics dinamically using the jms api (JMSManagementHelper.putOperationInvocation, QueueRequestor, etc).
The only way to have a distributed topic is creating it on each node of the cluster.
I can't find any information on how to create the topic on all nodes at once, if that's possible.
How can I easily create the topic on all nodes?
Client configuration uses spring and HornetQJMSClient.createConnectionFactoryWithHA to get session to servers.
<bean id="jmsConnectionFactoryUserCredential" primary="true" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter"> <property name="targetConnectionFactory" ref="hornetConnectionFactory"/> <property name="username" value="username"/> <property name="password" value="password"/> </bean> <bean id="hornetConnectionFactory" class="org.hornetq.api.jms.HornetQJMSClient" factory-method="createConnectionFactoryWithHA"> <constructor-arg index="0"> <util:constant id="CF" static-field="org.hornetq.api.jms.JMSFactoryType.CF" /> </constructor-arg> <constructor-arg index="1"> <bean class="org.hornetq.api.core.TransportConfiguration"> <constructor-arg value="org.hornetq.core.remoting.impl.netty.NettyConnectorFactory" /> <constructor-arg> <map key-type="java.lang.String" value-type="java.lang.Object"> <entry key="host" value="127.0.0.1"></entry> <entry key="port" value="5446"></entry> </map> </constructor-arg> </bean> </constructor-arg> </bean>
Server configuration is pretty much identical to the symmetric-cluster example.
<broadcast-groups>
<broadcast-group name="SITDR-broadcast-group">
<group-address>${udp-address:231.7.7.7}</group-address>
<group-port>9876</group-port>
<broadcast-period>100</broadcast-period>
<connector-ref>netty-connector</connector-ref>
</broadcast-group>
</broadcast-groups>
<discovery-groups>
<discovery-group name="SITDR-discovery-group">
<group-address>${udp-address:231.7.7.7}</group-address>
<group-port>9876</group-port>
<refresh-timeout>10000</refresh-timeout>
</discovery-group>
</discovery-groups>
<cluster-connections>
<cluster-connection name="SITDR-HornetQ-Cluster">
<address>jms</address>
<connector-ref>netty-connector</connector-ref>
<retry-interval>500</retry-interval>
<use-duplicate-detection>true</use-duplicate-detection>
<forward-when-no-consumers>false</forward-when-no-consumers>
<max-hops>1</max-hops>
<discovery-group-ref discovery-group-name="SITDR-discovery-group"/>
</cluster-connection>
</cluster-connections>
JMS Topic Creation:
...
connection = this.getConnectionFactory().createConnection();
session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
connection.start();
final Queue managementQueue = HornetQJMSClient.createQueue("hornetq.management");
final QueueRequestor requestor = new QueueRequestor((QueueSession) session, managementQueue);
final Message message = session.createMessage();
JMSManagementHelper.putOperationInvocation(message, "jms.server", operation, parameters);
final Message reply = requestor.request(message);
success = JMSManagementHelper.hasOperationSucceeded(reply);