在 Wildfly 10.x 中使用自带 ActiveMQ 提供的 Java 消息服务(JMS)

原先 JBoss 自带的消息服务是 HornetQ 实现的,后来 HornetQ 合并到 Apache ActiveMQ 中了,因此新版的 WildFly 集成的默认消息服务实现就是 ActiveMQ 了。
本文将使用一个小示例从零开始演示如何在 WildFly 中使用 JMS. 本示例的大纲如下:

  1. 怎样在 WildFly 中启用 JMS
  2. 怎样在 Java 代码中使用 JMS
    1. 消息发送
    2. 消息同步接收
    3. 消息异步接收
    4. 消息驱动Bean

怎样在 WildFly 中启用 JMS

配置文件

要使用消息服务,我们需要完整的 JBoss 配置文件 standalone-full.xml, 默认的 standalone.xml 并未提供 JMS. 因此建议将 standalone-full 中的全部内容复制到 standalone 中,并修改自己改过的部分(如数据源配置等)。然后正常启动 WildFly 即可。(或者你可以直接使用 standalone.bat -c standalone-full.xml 命令启动)
现在就启动服务器吧。

添加用户

要使用 JMS, 必须有一个用户角色是 guest 的 WildFly 用户。如果之前没有添加的话,那么需要先添加一个用户。
%WildFly_HOME%\bin\ 目录下执行 add-user.bat 按提示添加用户

添加消息队列或消息话题。

进行本步骤之前请确保服务器已正常启动
再打开一个命令行。进入命令行的管理界面:

上述命令将会创建一个名为 TestQ 的消息队列。若要创建一个 Topic, 只需将 queue 换为 topic 即可。

需要注意的是, entries 中内容开头必须为 java:/jboss/exported/xxx 这样在之后的 Java 中才能顺利找到 JNDI 名称。
该命令实际上是对配置的修改,你可以打开 standalone.xml 看看前后对比。

本部分参考:
Writing java based JMS Client for WildFly10 default ActiveMQ Artemis broker.

怎样在 Java 代码中使用 JMS

首先随便建个新项目我们演示一下。
(注意:需要%WildFly_HOME%\bin\client\jboss-client.jar

消息发送

其中,用到的 JMSUtil 类如下:

消息同步接收

消息异步接收

运行效果

JMS消息发送与接收
JMS消息发送与接收

消息驱动Bean

如果要在容器中使用的话,那么会更简单,只需使用注解修饰 消息驱动 Bean 即可,不需要像在 Java SE 中那样手动获取上下文获取连接之类的。
不过处理 Queue 和 Topic 的方式有点略微不同。
若是 Queue, 只需使用注解:

若是 Topic, 还需要指明是否为持久化的 Topic, 以及 ClientId(需要持久化时,用于标识客户端,这样消息服务器才能知道这个消息你有没有消费过)

​本文代码可在 GitHub 上找到。​
​MDB 需要部署到容器中,因此这里没有特意单独做一个可部署的工程示例,不过有​例子可在 GitHub 上找到。


发表评论

电子邮件地址不会被公开。 必填项已用*标注