我一直在网络上几天的文档和帖子,但无法管理配置它的权利。与Spring 3.1集成HornetQ(2.2.x)
我正在开发独立环境,我试图在我的Spring3.1应用程序上简单地集成HornetQ。
我知道我还必须修改Hornetq特定的xml的几个。
它似乎总是缺少我的谜题。
任何完整的简单工作示例?
非常感谢, 射线。
我一直在网络上几天的文档和帖子,但无法管理配置它的权利。与Spring 3.1集成HornetQ(2.2.x)
我正在开发独立环境,我试图在我的Spring3.1应用程序上简单地集成HornetQ。
我知道我还必须修改Hornetq特定的xml的几个。
它似乎总是缺少我的谜题。
任何完整的简单工作示例?
非常感谢, 射线。
您是使用HornetQ作为嵌入式JMS服务器还是将它与JBoss一起使用?在这两种情况下,它会有2个不同的答案尼古拉斯回答与嵌入式案例有关。因为你说你在独立环境下工作,所以我建议你不要在Spring中集成JMS,而是使用EE特性,比如EJB和MDB。它易于配置,并已在那里。您所需要的只是正确配置它,为消费者创建MDB并为初始化弹簧配置创建@Singleton EJB。
这里工作example(russian original)
编辑 所以,完整版:
hornetq-configuration.xml文件:
<configuration xmlns="urn:hornetq"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:hornetq/schema/hornetq-configuration.xsd">
<persistence-enabled>false</persistence-enabled>
<create-bindings-dir>true</create-bindings-dir>
<create-journal-dir>true</create-journal-dir>
<!--<create-paging-dir>true</create-paging-dir>-->
<journal-directory>/tmp/journal</journal-directory>
<paging-directory>/tmp/paging</paging-directory>
<bindings-directory>/tmp/binding</bindings-directory>
<!-- disable security -->
<security-enabled>false</security-enabled>
<!-- Connectors -->
<connectors>
<connector name="in-vm">
<factory-class>org.hornetq.core.remoting.impl.invm.InVMConnectorFactory</factory-class>
</connector>
</connectors>
<acceptors>
<acceptor name="in-vm">
<factory-class>org.hornetq.core.remoting.impl.invm.InVMAcceptorFactory</factory-class>
</acceptor>
</acceptors>
<!-- Other config -->
<!--<security-settings>-->
<!--<!–security for example queue–>-->
<!--<security-setting match="#">-->
<!--<permission type="createDurableQueue" roles="guest"/>-->
<!--<permission type="deleteDurableQueue" roles="guest"/>-->
<!--<permission type="createNonDurableQueue" roles="guest"/>-->
<!--<permission type="deleteNonDurableQueue" roles="guest"/>-->
<!--<permission type="consume" roles="guest"/>-->
<!--<permission type="send" roles="guest"/>-->
<!--</security-setting>-->
<!--</security-settings>-->
</configuration>
将hornetq-jms.xml文件:
<configuration xmlns="urn:hornetq"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:hornetq /schema/hornetq-jms.xsd">
<connection-factory name="ConnectionFactory">
<connectors>
<connector-ref connector-name="in-vm"/>
</connectors>
<entries>
<entry name="ConnectionFactory"/>
</entries>
<consumer-window-size>0</consumer-window-size>
<retry-interval>1000</retry-interval>
<retry-interval-multiplier>1.5</retry-interval-multiplier>
<max-retry-interval>60000</max-retry-interval>
<reconnect-attempts>1000</reconnect-attempts>
</connection-factory>
<!--the queue used by the example-->
<queue name="statusQueue">
<entry name="queue/statusQueue"/>
</queue>
</configuration>
如果启用了安全性,还应该创建文件hornetq-users.xml中与用户和角色说明。
弹簧配置:
<bean id="jmsServer" class="org.hornetq.jms.server.embedded.EmbeddedJMS" init-method="start" destroy-method="stop"/>
<bean id="jmsConnectionFactory"
class="mypackecge.JmsConnecitonFactoryLocator"
depends-on="jmsServer"
factory-method="lookupConnectionFactory">
<constructor-arg name="server" ref="jmsServer"/>
</bean>
<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate" depends-on="jmsServer">
<property name="connectionFactory">
<ref bean="jmsConnectionFactory"/>
</property>
<property name="destinationResolver">
<ref bean="jmsDestResolver"/>
</property>
</bean>
<bean id="jmsDestResolver" class="mypackage.EmbeddedDestinationResolver">
<property name="server" ref="jmsServer"/>
</bean>
<bean id="statusQueue" class="mypackage.JmsQueueLocator"
depends-on="jmsServer"
factory-method="lookupQueue">
<constructor-arg name="server" ref="jmsServer"/>
<constructor-arg name="queueName" value="queue/statusQueue"/>
</bean>
<bean id="jmsContainerStatus" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsConnectionFactory"/>
<property name="destination" ref="statusQueue"/>
<property name="messageListener" ref="statusChecker" />
<property name="concurrentConsumers" value="5"/>
</bean>
接着,查找JMS sessionFacroty和队列创建的类。
目标解析器,由jmsTeplate用来解析发送消息的位置。
public class EmbeddedDestinationResolver implements DestinationResolver {
private EmbeddedJMS server;
public EmbeddedJMS getServer() {
return server;
}
public void setServer(EmbeddedJMS server) {
this.server = server;
}
@Override
public Destination resolveDestinationName(Session session, String destinationName, boolean pubSubDomain) throws JMSException {
return (Destination)server.lookup(destinationName);
}
}
连接工厂定位器。
public class JmsConnecitonFactoryLocator {
public static HornetQJMSConnectionFactory lookupConnectionFactory(EmbeddedJMS server){
HornetQJMSConnectionFactory cf = (HornetQJMSConnectionFactory) server.lookup("ConnectionFactory");
return cf;
}
}
队列定位器。
public class JmsQueueLocator {
public static Queue lookupQueue(EmbeddedJMS server, String queueName){
return (Queue) server.lookup(queueName);
}
}
消息处理程序。
@Component(value = "statusChecker")
public class StatusChecker implements MessageListener {
private static final Logger logger = LoggerFactory.getLogger(StatusChecker.class);
@Override
public void onMessage(Message message) {
// handle message, call message.acknowledge()
}
和用于在队列发送消息JmsTemplate的样品:
@Component
public class WorkQueue {
private JmsTemplate jmsTemplate;
public JmsTemplate getJmsTemplate() {
return jmsTemplate;
}
@Autowired
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
public void addStatusRequestToQueue(final Transaction t) throws JMSException {
jmsTemplate.send("queue/statusQueue", new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
TextMessage msg = session.createTextMessage();
msg.setText(String.valueOf(t.getId()));
return msg;
}
});
}
嗨,其实我使用HornetQ与Spring集成而不是Jboss。 – rayman
我更新了答案 – user1516873
下面是一个例子:http://www.javacodegeeks.com/2010/06/spring-3-hornetq-21-integration。 html?m = 1 – Nicholas