最近看公司的项目中用到JMS,曾经写代码的时候也用过JMS来发送消息,但是用的东西都是老大封装好的,不知道究竟JMS是怎么一回事,这两天有空自己找了点资料了解了一下,但是我也是自学的小菜鸟,不能确定我下边写的demo完全可靠,如果有错误请大神们多多指点。
1、JMS简介:JMS即Java Message Service,是Java 程序创建、发送、接收和读取企业消息传送系统的消息提供了一种常用的方式。个人感觉JMS类似与JDBC,Java提供一个接口让不同的厂商去实现,常见的实现有ActiveMQ、JBoss MQ、IBM Websphere MQ等,我在demo中用的是ActiveMQ。关于JMS的简介网上有许多不错的文章我也是看他们学习JMS的,当然学一个东西前我们首先大概了解他们是干嘛的,个人觉得还是有必要的。简介在此就不再赘述了,附件中的JavaEE_CN.chm文档中查看javax.JMS也会有较为详细的叙述。推荐几篇不错的文章大家可以去看看http://somebody-hjh.iteye.com/blog/726050(理论和实践相结合写的相当不错)http://www.open-open.com/doc/view/aa41a61492b445b9bc69204eccecf26d(基本上都是理论,但是对JMS的知识点写的非常详尽)。
2、准备工作:根据你的需求到apache官网下载ActiveMQ的安装包http://activemq.apache.org/download-archives.html,我下载的是apache-activemq-5.5.1版本的。
(像是这种东东或者jar包一般到官网上去下载就可以了,方便省事,不用到网上去求。大多数下载还要积分,这种做法我觉得的很恶心,许多东西用谷歌搜出来到哪些外文网站上就可以直接下载下来。但是它也有两个缺点,一、对于我们这种英语不大好的找到下载的地方比较费劲;二、下载速度会比较慢一些)
3、解压下载的zip包,运行bin下的activemq.bat文件,启动MQ服务。
4、在浏览器中输入:http://localhost:8161/查看是否已成功启动MQ服务,在启动后程序有两个端口会被MQ占用:8161和61616,8161被ActiveMQ自带的web应用程序占用改应用程序可以用来管理消息,61616而用来等待JMS client的连接。
5、完成上述工作后开始写第一个小demo发送一段字符串:
写程序之前我们首先需要引用下边两个jar包,第一个包在先前解压的文件中有可以去复制过来,第二个是日志文件的一个包,我刚开始做的时候报错下边这样的错误,在网上自己下载了个日志文件的jar包弄进去就好了,后来发现在解压文件里边中ib------》optional下有这样两个jar包log4j-1.2.14.jar、slf4j-log4j12-1.5.11.jar,引入就好使了
7、发送JMS消息
- public class QueueSend {
- public static void main(String[] args) throws JMSException {
- ConnectionFactory connectionfactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
- //创建与JMS服务的连接:ConnectionFactory被管理的对象,由客户端创建,用来创建一个连接对象
- Connection connection = connectionfactory.createConnection();//获取连接,connection一个到JMS系统提供者的活动连接
- Session session =connection.createSession(false,Session.AUTO_ACKNOWLEDGE );//打开会话,一个单独的发送和接受消息的线程上下文
- Queue queue = new ActiveMQQueue("queue.msgText");
- MessageProducer msgProducer = session.createProducer(queue);
- Message msg = session.createTextMessage("使用jms发送文本消息");
- msgProducer.send(msg);
- System.out.println("文本消息已发送");
- session.close();
- connection.close();
- }
- }
8、接受JMS消息
- public class QueuesAccept {
- public static void main(String[] args) throws JMSException {
- String jmsProviderAddress = "tcp://localhost:61616";// 地址
- ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(jmsProviderAddress);
- Connection conn = connectionFactory.createConnection();
- Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
- String destinationName = "userId";
- Destination dest = session.createQueue(destinationName);
- MessageConsumer consumer = session.createConsumer(dest);
- conn.start();
- TextMessage textMessage = (TextMessage) consumer.receive();//先手动接受JMS消息,这儿可以用监听
- String text = textMessage.getText();
- System.out.println("发送内容为:" + text);
- consumer.close();
- session.close();
- conn.close();
- }
- }
第一个demo就搞定了,发送JMS后可以在ActiveMQ自带的web应用程序中查看到发送消息的相关信息。