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);