ActiveMQ学习笔记4通过ActiveMQ收发消息.docx
- 文档编号:913187
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:20
- 大小:19.42KB
ActiveMQ学习笔记4通过ActiveMQ收发消息.docx
《ActiveMQ学习笔记4通过ActiveMQ收发消息.docx》由会员分享,可在线阅读,更多相关《ActiveMQ学习笔记4通过ActiveMQ收发消息.docx(20页珍藏版)》请在冰豆网上搜索。
ActiveMQ学习笔记4通过ActiveMQ收发消息
1.队列和主题
1.1概念
在MQ中,消息模型有两种,一种是队列(Queue,一种是主题(Topic。
队列是Point-To-Point的,队列中的消息,仅能被消费一次。
主题是Pub/Sub模型,主题中的消息,可以由多个订阅者消费;订阅者只能消费它订阅以后的消息。
这是遵循的JMS规范。
1.2收发消息对象创建过程
如上图所示,JMS规范中,收发消息的对象创建过程如下,下面的示例代码中也将注释这些过程:
1.初始化ConnetionFactory
2.ConnetionFactory创建Connection
3.Connection创建Session
4.Session创建Destination(包括Queue和Topic两种
5.发:
Session创建消息生产者MessageProducer(收:
Session创建消息消费者MessageConsumer
6.Seesion创建Message,(发:
MessageProducer发送到Destination,(收:
MessageConsumer从Destination接受消息。
1.3接口间的关系
JMS规范定义了通用接口(JMSCommonInterfaces、队列接口(PTP-specific
Interfaces和主题接口(Pub/Sub-specificInterfaces
队列接口和主题接口分别继承
于通用接口,具体关系如下表所示。
ActiveMQ对这些规范接口都有相应的实现。
在实际的编程过程中,声明通用接口基本就够用了。
如何区分Queue和Topic也很简单,参看下面的代码。
?
12345//Queue,队列
Destinationdestination=session.createQueue(subject;
//Topic,主题
Destinationdestination=session.createTopic(subject;
2.通过队列发送和接受消息
运行代码的时候,可以先run起来接受消息的程序,再run发送消息的程序,来观察消息发送的过程。
别忘记启动ActiveMQ服务器,安装部署和启动的办法,参加学习笔记3。
2.1通过Queue发送消息
?
123456789
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36packageguo.examples.mq01.queue;
importjavax.jms.Connection;
importjavax.jms.ConnectionFactory;
importjavax.jms.Destination;
importjavax.jms.JMSException;
importjavax.jms.MessageProducer;
importjavax.jms.Session;
importjavax.jms.TextMessage;
importorg.apache.activemq.ActiveMQConnection;
importorg.apache.activemq.ActiveMQConnectionFactory;
/**
*演示如何向MQ发送消息,和JDBC操作数据库的过程很像
*
*1.初始化连接工厂ConnectionFactory
*
*2.创建连接Connection
*
*3.创建会话session
*
*4.打开队列createQueue
*
*5.获得消息生产者MessageProducer
*
*6.使用消息生产者发送消息
*
*7.关闭会话session和连接Connection
*
*可以看出,使用JMS发送一个这么简单的消息,需要这么多的步骤,不方便。
*
*/
publicclassSender{
publicstaticvoidmain(String[]args{
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80Sendersender=newSender(;
Stringmsg="HelloWorld!
";
sender.sendMessage(msg;
System.out.println("发送消息结束:
"+msg;
}
/**
*使用JMS向MQ发送消息
*
*@parammsg消息内容
*/
publicvoidsendMessage(Stringmsg{
//defualtuser&passwordbotharenull
Stringuser=ActiveMQConnection.DEFAULT_USER;
Stringpassword=ActiveMQConnection.DEFAULT_PASSWORD;
//DEFAULT_BROKER_URL=failover:
//tcp:
//localhost:
61616
Stringurl=ActiveMQConnection.DEFAULT_BROKER_URL;
Stringsubject="TOOL.DEFAULT";
//1.初始化连接工厂
ConnectionFactorycontectionFactory=newActiveMQConnectionFactory(user,password,url;try{
//2.创建连接
Connectionconnection=contectionFactory.createConnection(;
connection.start(;
//3.创建会话
Sessionsession=connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE;//4.打开队列
Destinationdestination=session.createQueue(subject;
//5.MessageProducer负责发送消息
MessageProducerproducer=session.createProducer(destination;
TextMessagemessage=session.createTextMessage(;
for(inti=0;i<10;i++{
Stringtmp=i+":
"+msg;
message.setStringProperty("hello",tmp;
//6.发送消息
producer.send(message;
System.out.println("send:
"+tmp;
Thread.sleep(3000;
//只有commit之后,消息才会进入队列
mit(;
}
//7.关闭会话和连接
session.close(;
81
82
83
84
85
86
87
88connection.close(;
}catch(JMSExceptione{
e.printStackTrace(;
}catch(InterruptedExceptione{e.printStackTrace(;
}
}
}
2.2通过Queue接受消息?
123456789
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29packageguo.examples.mq01.queue;
importjavax.jms.Connection;
importjavax.jms.ConnectionFactory;
importjavax.jms.Destination;
importjavax.jms.JMSException;
importjavax.jms.Message;
importjavax.jms.MessageConsumer;
importjavax.jms.MessageListener;
importjavax.jms.Session;
importjavax.jms.TextMessage;
importorg.apache.activemq.ActiveMQConnection;importorg.apache.activemq.ActiveMQConnectionFactory;
/**
*演示如何从MQ接受消息,和发送差不多
*
*1.初始化连接工厂ConnectionFactory
*
*2.创建连接Connection
*
*3.创建会话session
*
*4.打开队列createQueue
*
*5.获得消息消费者MessageConsumer
*
*6.使用MessageConsumer接受消息
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71*
*7.关闭会话session和连接Connection
*
*/
publicclassReceiver{
publicstaticvoidmain(String[]args{
Stringuser=ActiveMQConnection.DEFAULT_USER;
Stringpassword=ActiveMQConnection.DEFAULT_PASSWORD;
Stringurl=ActiveMQConnection.DEFAULT_BROKER_URL;
Stringsubject="TOOL.DEFAULT";
ConnectionFactoryconnectionFactory=newActiveMQConnectionFactory(user,password,url;Connectionconnection;
try{
connection=connectionFactory.createConnection(;
connection.start(;
finalSessionsession=connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE;Destinationdestination=session.createQueue(subject;
//MessageConsumer负责接受消
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ActiveMQ 学习 笔记 通过 收发 消息