如何使用 ActiveMQ 设置 Mule Publisher Subscriber 模型?我一直在网上寻找一个简单易懂但无法理解的完整示例。我要做的就是向 MQ 主题发送一个字符串(使用发布者),然后从主题中读取消息(使用订阅者)。没有什么太复杂
1 回答
以下步骤描述了如何使用 Apache MQ 作为 Mule Pub/Sub 模型的一部分
设置活动 MQ
• 下载 Apache 的 ActiveMQ。我目前使用的是“apache-activemq-5.2.0”版本</p>
• 解压下载到已知位置(例如 C:\MQ\apache-activemq-5.2.0)
• ACTIVEMQ_HOME 的设置环境变量 (C:\MQ\apache-activemq-5.2.0\bin\win32)
• 运行 C:\MQ\apache-activemq-5.2.0\bin\win32\InstallService.bat(卸载运行 unInstallService.bat)
• 要验证,请转到控制面板 -> 管理工具 -> 服务并查找 ActiveMQ 服务
• 启动服务(可设置为自动启动)
• 浏览到http://localhost:8161/admin/以查看 MQ 仪表板
============
设置 Mule Publisher
- 创建骡子项目
- 右键单击项目属性并选择“Java Build Path”</li>
选择“库”选项卡,然后单击“添加外部罐子”
浏览到 MQ jar 文件的位置(例如 C:\MQ\apache-activemq-5.2.0\activemq-all-5.2.0.jar)并选择 OK 接受
新添加的 Jar 文件应该在列表中
- 选择确定关闭属性窗口
为项目创建一个全局元素
选择“创建”</p>
选择连接器配置 --> JMS --> ActiveMQ 并确定接受(MQ 将具有默认设置,对于本示例来说是可以的)
拖动 HTTP 连接器并配置
- 将端口号设置为空闲的端口(例如 8075)
- 将“路径”设置为“/pub”</li>
将 JMS 连接器拖到 HTTP 连接器的右侧并配置
- 将交换模式设置为“OneWay”</li>
- 选择“主题”并为其命名(例如 MyLocalTopic)
- 从连接器配置下拉列表中 - 选择之前创建的 Global Active-MQ 元素
- 设置事务(例如“XATransaction”)
- 设置动作(例如“无”)
流程应该如下所示
<flow name="pubsubFlow1">
<http:listener config-ref="HTTP_Listener_Configuration_8075" path="/pub" doc:name="HTTP_8075"/>
<jms:outbound-endpoint connector-ref="Active_MQ" doc:name="JMS" topic="MyLocalTopic">
<xa-transaction action="NONE"/>
</jms:outbound-endpoint>
设置 Mule 订阅者
- 创建骡子项目
- 右键单击项目属性并选择“Java Build Path”</li>
选择“Libraries”选项卡并点击“Add External Jars”</p>
浏览到 MQ jar 文件的位置(例如 C:\MQ\apache-activemq-5.2.0\activemq-all-5.2.0.jar)并选择 OK 接受
- 新添加的 Jar 文件应该在列表中
- 选择确定关闭属性窗口为项目创建一个全局元素
- 选择“创建”</li>
- 选择连接器配置 --> JMS --> ActiveMQ 并确定接受(MQ 将具有默认设置,对于本示例来说是可以的)
将 JMS 连接器拖到设计托盘上并配置
- 将交换模式设置为“OneWay”</li>
- 选择“主题”并为其命名(例如 MyLocalTopic)
- 从连接器配置下拉列表中 - 选择之前创建的 Global Active-MQ 元素
- 设置交易类型(例如“NoTransaction”)
- 设置动作(例如“无”)
- 将“Logger”连接器拖到 JMS 连接器的右侧并配置
- 设置消息,例如“FIRST SUBSCRIBER - PAYLOAD FROM MQ #[payload]”</li>
如上所述创建第二个 Mule 订阅者项目,但这次将 Logger 消息设置为“SECOND SUBSCRIBER - PAYLOAD FROM MQ #[payload]”。这将允许您看到两个订阅者订阅了同一主题
<flow name="pubsub_readqueueFlow">
<jms:inbound-endpoint topic="MyLocalTopic" connector-ref="Active_MQ" doc:name="JMS">
</jms:inbound-endpoint>
<logger message="FIRST SUBSCRIBER - PAYLOAD FROM MQ #[payload]" level="INFO" doc:name="Logger"/>
</flow>
正在运行的应用程序 将消息发布到队列
- 运行发布应用程序
- 使用 Soap 客户端(例如 SoapUI)将消息发布到 http://localhost:8075/pub
- 从 Active-MQ 仪表板浏览到主题(http://localhost:8161/admin/topics.jsp)以查看新添加的消息
消费消息
- 运行两个订阅应用程序
- 刷新仪表板以查看添加的消费者。(参见下面我的仪表板示例)
您还可以通过单击“MyLocalTopic”主题向主题发送消息。在“消息正文”文本中输入一条消息并发送。主题中的消息计数应该增加。
订户输出