`
西北小强
  • 浏览: 342426 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JMS学习笔记(一)——JMS简介安装ActiveMQ

    博客分类:
  • JMS
阅读更多

最近看公司的项目中用到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应用程序中查看到发送消息的相关信息。

  • 大小: 124.3 KB
  • 大小: 41.6 KB
  • 大小: 32.1 KB
  • 大小: 122.4 KB
  • 大小: 144.4 KB
分享到:
评论
4 楼 pan_1308 2016-01-23  
很是不错!
3 楼 zhenglu119 2014-01-24  
楼主,我安装你的方法,调不通啊。起producer的时候报错
javax.jms.JMSException: Could not connect to broker URL: tcp:localhost:61616. Reason: java.lang.IllegalArgumentException: port out of range:-1能帮我解答下么
2 楼 heyin12345 2013-09-10  
文字写的很好,谢谢分享。
但是要调通的话 要修改一下  String destinationName = "userId"; 名称为
String destinationName = "queue.msgText";
1 楼 yo8237233 2013-08-14  
这篇文章很用心 ,谢谢分享

相关推荐

Global site tag (gtag.js) - Google Analytics