Jakarta ee 如何配置Wildfly以连接到RabbitMQ?
我在配置JB EAP7以使用RabbitMQ作为消息代理时遇到困难。 我已经创建了一个rabbitmq模块,并在我的standalone-ha.xml中将其定义为一个全局模块 modules/system/layers/base/com/rabbitmq/main/module.xml:Jakarta ee 如何配置Wildfly以连接到RabbitMQ?,jakarta-ee,rabbitmq,jms,wildfly,message-driven-bean,Jakarta Ee,Rabbitmq,Jms,Wildfly,Message Driven Bean,我在配置JB EAP7以使用RabbitMQ作为消息代理时遇到困难。 我已经创建了一个rabbitmq模块,并在我的standalone-ha.xml中将其定义为一个全局模块 modules/system/layers/base/com/rabbitmq/main/module.xml: <module xmlns="urn:jboss:module:1.1" name="com.rabbitmq"> <resources> <resourc
<module xmlns="urn:jboss:module:1.1" name="com.rabbitmq">
<resources>
<resource-root path="rabbitmq-jms-1.7.0.jar"/>
<resource-root path="amqp-client-4.2.0.jar" />
</resources>
<dependencies>
<module name="javax.api" />
<module name="javax.transaction.api"/>
<module name="org.slf4j"/>
</dependencies>
</module>
我不确定如何在MDB中标识我希望MDB使用RabbitMQ定义的ConnectionFactory。我的MDB定义为:
@MessageDriven(
activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "java:/global/mq/kodo") })
public class Subscriber implements MessageListener {
public void onMessage(final Message message) {
try {
System.out.println(message.getBody(Object.class).toString());
} catch (JMSException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
}
但是我找不到在何处/如何指定ConnectionFactory的文档。我已经尝试将@JMSConnectionFactory(stringjndi)
注释添加到我的类中,但仍然得到相同的结果
我的RabbitMQ模块定义中是否缺少某些内容?我的MDB注释是否不正确?要配置我的MDB以使用我的RabbitMQ ConnectionFactory连接到Message Broker,我需要做什么?如果要为MDB使用另一个代理,则必须更改Wildfly配置文件中的配置,该配置文件仅存在于完整配置文件中,因为MDB是Java EE完整配置文件的一部分,而不是web配置文件。 例如,standalone-full.xml文件中提供了此配置:
<mdb>
<resource-adapter-ref resource-adapter-name="${ejb.resource-adapter-name:activemq-ra.rar}"/>
<bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
</mdb>
不幸的是,似乎还不可能使用MDB通过连接到RabbitMQ。
这是因为它没有实现一些可选的JMS客户机规范特性。看
因此,要使用连接到RabbitMQ的消息侦听器(如果您不想轮询队列),可以尝试在方法和CDI的帮助下手动声明它们。有关详细信息,请参阅。但是,我不确定最后一个方法在Wildfly中是否有效(将在Wildfly中测试,该方法从Java EE Web概要文件开始),根据javadoc,该方法引发了一个异常:
如果JMS提供程序由于以下原因之一而无法设置MessageConsumer的MessageListener:
发生内部错误或
此方法已在JavaEEWeb或EJB应用程序中调用(尽管不保证在这种情况下引发异常)
请注意,要使用文档中描述的Wildfly配置,必须使用1.7.0版本,如enable Wildfly配置
我将尝试分享我在测试RabbitMQ JMS客户机与wildfly集成时所做的一段代码谢谢。我放弃了MDB的想法,只使用消息侦听器和CDI(从独立的ha.xml检索ConnectionFactory和队列定义)。现在,我在自动恢复方面遇到了问题,或者如何使用JMS客户端处理超时。请看,您是否已经了解了如何处理JMS客户端的异常处理?这在技术上是否可以在JMS客户端中实现,或者AMQP是否天生就无法满足JMS中的某些MDB需求?我们讨论的特定JMS特性是什么?中列出的所有特性都可以添加到RabbitMQ JMS客户端。这些特性允许使用RabbitMQ JMS客户端启用JEE MDB。如果没有这一点,还可以使用AMQP实现JCA资源适配器,这将在JEE应用程序中启用MDB,例如(TOME文档)。目前,RabbitMQ仅为JEE应用程序提供部分JMS impl,没有资源适配器。是否有人使用ActiveMQ资源适配器通过AMQP将RabbitMQ与MDB连接的公开示例?
<mdb>
<resource-adapter-ref resource-adapter-name="${ejb.resource-adapter-name:activemq-ra.rar}"/>
<bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
</mdb>