【发布时间】:2017-08-16 04:33:57
【问题描述】:
我正在做概念验证,但我无法收听 Wildfly 的消息。有谁知道这是可能的吗?我已经尝试了很多天:C
【问题讨论】:
-
嗨,Cesar,您是否找到了另一种从 Wildfly 收听 RabbitMQ 目的地的解决方案?
我正在做概念验证,但我无法收听 Wildfly 的消息。有谁知道这是可能的吗?我已经尝试了很多天:C
【问题讨论】:
您可以在 Wildfly 上运行的应用程序中使用 RabbitMQ JMS Client。
您只需使用 CDI 生产者(如果您的应用是 JEE)手动生成 RabbitMQ JMS ConnectionFactory 和 Destination 对象,或者通过从 RabbitMQ JMS 客户端 1.7.0 版本开始的 JNDI 绑定配置。
对于 Wildfly JNDI 绑定配置,您可以查看 RabbitMQ JMS Client 文档和 Wildfly Naming Subsystem configuration。
然后您可以在您的应用程序中使用 @Resource 注入 JMS 连接工厂和目标对象。请注意,您还必须将 JMS 客户端库放在 Wildfly global-modules
中声明的 jboss-module 中最后,如果您想注册消息侦听器,您可以尝试手动执行此操作,方法是创建实现 JMS MessageListener 接口的侦听器并借助 setMessageListener 方法(加上 CDI 管道)手动将侦听器注册到 RabbitMQ 队列。事实上,目前还无法将消息驱动 Bean 与当前版本的 RabbitMQ JMS 客户端一起使用。有关详细信息,请参阅this post。 但是我不确定最后一个是否可以在 Wildfly(待测试)中工作,根据 javadoc,此方法会引发 JMS 异常:
如果 JMS 提供程序由于以下原因之一未能设置 MessageConsumer 的 MessageListener:发生内部错误或在 Java EE Web 或 EJB 应用程序中调用了此方法(尽管不能保证会引发异常在这种情况下)
另外,也许这最适合从 WEB 配置文件开始的 Wildfly,而不是 Java EE 7 完整配置文件?
【讨论】: