博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ActiveMQ第二弹:使用Spring JMS与ActiveMQ通讯
阅读量:7119 次
发布时间:2019-06-28

本文共 5821 字,大约阅读时间需要 19 分钟。

本文章的完整代码可从我的github中下载:

上一篇文章中介绍了如何安装和运行ActiveMQ。这一章主要讲述如何使用Spring JMS向ActiveMQ的Message Queue中发消息和读消息。

首先需要在项目中引入依赖库。

  • spring-core: 用于启动Spring容器,加载bean。

  • spring-jms:使用Spring JMS提供的API。

  • activemq-all:使用ActiveMQ提供的API。

在本示例中我使用maven来导入相应的依赖库。

pom.xml
1234567891011121314151617181920212223
junit
junit
4.11
test
org.apache.activemq
activemq-all
5.9.0
org.springframework
spring-jms
4.0.2.RELEASE
org.springframework
spring-core
4.0.2.RELEASE

接下来配置与ActiveMQ的连接,以及一个自定义的MessageSender。

springJMSConfiguration.xml
1234567891011121314151617181920212223242526272829303132333435363738
application.properties

在此配置文件中,我们配置了一个ActiveMQ的connection factory,使用的是ActiveMQ提供的ActiveMQConnectionFactory类。然后又配置了一个Spring JMS提供的CachingConnectionFactory。我们定义了一个ActiveMQQueue作为消息的接收Queue。并创建了一个JmsTemplate,使用了之前创建的ConnectionFactory和Message Queue作为参数。最后自定义了一个MessageSender,使用该JmsTemplate进行消息发送。

以下MessageSender的实现。

MessageSender.java
12345678910111213141516
package huangbowen.net.jms;import org.springframework.jms.core.JmsTemplate;public class MessageSender {
private final JmsTemplate jmsTemplate; public MessageSender(final JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate; } public void send(final String text) {
jmsTemplate.convertAndSend(text); }}

这个MessageSender很简单,就是通过jmsTemplate发送一个字符串信息。

我们还需要配置一个Listener来监听和处理当前的Message Queue。

springJMSReceiver.xml
12345678910111213141516

在上述xml文件中,我们自定义了一个MessageListener,并且使用Spring提供的SimpleMessageListenerContainer作为Container。

以下是MessageLinser的具体实现。

MessageReceiver.java
123456789101112131415161718
package huangbowen.net.jms;import javax.jms.*;public class MessageReceiver implements MessageListener {
public void onMessage(Message message) {
if(message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message; try {
String text = textMessage.getText(); System.out.println(String.format("Received: %s",text)); } catch (JMSException e) {
e.printStackTrace(); } } }}

这个MessageListener也相当的简单,就是从Queue中读取出消息以后输出到当前控制台中。

另外有关ActiveMQ的url和所使用的Message Queue的配置在application.properties文件中。

application.properties
12
jms.broker.url=tcp://localhost:61616jms.queue.name=bar

好了,配置大功告成。如何演示那?我创建了两个Main方法,一个用于发送消息到ActiveMQ的MessageQueue中,一个用于从MessageQueue中读取消息。

SenderApp
123456789101112131415161718192021222324252627282930
package huangbowen.net;import huangbowen.net.jms.MessageSender;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.util.StringUtils;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class SenderApp{
public static void main( String[] args ) throws IOException {
MessageSender sender = getMessageSender(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String text = br.readLine(); while (!StringUtils.isEmpty(text)) {
System.out.println(String.format("send message: %s", text)); sender.send(text); text = br.readLine(); } } public static MessageSender getMessageSender() {
ApplicationContext context = new ClassPathXmlApplicationContext("springJMSConfiguration.xml"); return (MessageSender) context.getBean("messageSender"); }}
ReceiverApp.java
12345678910
package huangbowen.net;import org.springframework.context.support.ClassPathXmlApplicationContext;public class ReceiverApp {
public static void main( String[] args ) {
new ClassPathXmlApplicationContext("springJMSConfiguration.xml", "springJMSReceiver.xml"); }}

OK,如果运行的话要先将ActiveMQ服务启动起来(更多启动方式参见我上篇文章)。

1
$:/usr/local/Cellar/activemq/5.8.0/libexec$ activemq start xbean:./conf/activemq-demo.xml

然后运行SenderApp中的Main方法,就可以在控制台中输入消息发送到ActiveMQ的Message Queue中了。运行ReceiverApp中的Main方法,则会从Queue中将消息读出来,打印到控制台。

这就是使用Spring JMS与ActiveMQ交互的一个简单例子了。完整代码可从https://github.com/huangbowen521/SpringJMSSample下载。

转载地址:http://bqnel.baihongyu.com/

你可能感兴趣的文章
转豆瓣--梁海棠尽管死了,但却占领了陈少杰的身心。乔燕尽管还…
查看>>
JavaScript的隐式转换
查看>>
linux实用的日志分析脚本
查看>>
手机号码归属地查询
查看>>
HDU3123:GCC(同余模简单题)
查看>>
Visual Studio Developer Assistant 3月新功能展示
查看>>
SimpleDateFormat使用具体解释
查看>>
微信公众号发起微信支付 c#
查看>>
Qt widgets deeps--烧鸡
查看>>
Android StrictMode介绍
查看>>
JAVA Metrics 度量工具使用介绍1
查看>>
Spring mvc 返回json格式 - 龙企阁 - 博客频道 - CSDN.NET
查看>>
Android 数据库升级解决方案
查看>>
nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored
查看>>
IIS启用.net2.0
查看>>
ocp认证考试指南第一章
查看>>
归并排序算法
查看>>
RMAN冷备份异机还原
查看>>
Atlas系列一:Atlas功能特点FAQ
查看>>
Android开机动画启动流程
查看>>