第171次(ActiveMQ)

学习主题:ActiveMQ

学习目标:

1 掌握什么是MQ 什么是JMS

2 掌握ActiveMQ的安装与目录结构

对应作业

  1. ActiveMQ简介
  1. 什么是ActiveMQ?

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位.

  1. 什么是消息?

消息是在两台计算机间传送的数据单位.消息可以非常简单,列如只包含文本字符串;也可以更加复杂,可能包含嵌入对象.

  1. 什么是队列?

和数据结构中学习的一样,特点:先进先出

  1. 什么是消息队列?

消息队列是在消息传输过程中,保存消息的容器.

  1. 常见的消息服务有哪些?

ActiveMQ RabbitMQ RocketMQ

  1. 消息服务应用场景
  1. 消息服务可应用于哪些场景?

用户注册 订单处理

  1. 如何将Solr集群中的索引库分为两片?
  2. JMS消息模型介绍
  1. 什么是JMS?

JMS(Java Messaging Service)是JAVA 平台上有关面向消息中间件的技术规范,他便于消息系统中的Java应用程序进行消息交换,并且通过提标准的产生,发送,接受消息的接口,简化企业应用的开发.

  1. JMS中有哪些消息模型?

点对点 和 广播(1对多)

  1. 安装ActiveMQ
  1. 如何安装ActiveMQ?
  1. 下载Active MQ
  2. 移动到Liunx系统上进行解压
  3. 执行/bin/activeMQ即可。
  4. ActiveMQ目录介绍
  1. ActiveMQ有哪些目录?没给目录的作用是什么?

bin 存放的是脚本文件

conf 存放的是进本配置文件

data 存放的是日志文件

docs 存放的是说明文档

example存放的是简单的示例

lib 存放的是activemq所需的jar包

webapps 用于存放项目的目录

第172次(ActiveMQ)

学习主题:ActiveMQ

学习目标:

1 掌握ActiveMQ中的术语与API

2 掌握使用MQ处理文本消息,对象消息

3 掌握使用ActiveMQ实现队列服务监听处理消息

4 掌握Topic模型

对应作业

  1. ActiveMQ中的术语
  1. Destination是什么含义?

目的地,JMS Provider(消息中间件)负责维护,用于对Message进行管理的对象。

MessageProducer 需要指定Destination才能发送消息,Message Receiver需要指定Detination才能接受消息

  1. Producer是什么含义?

消息生产者, 负责发送Message到目的地

  1. Consumer | Receiver是什么含义?

消息消费者,负责从目的地中消费{处理|监听 |订阅}Message

  1. Message是什么含义?

消息,消息封装一次通信的内容

  1. ActiveMQ中的常用API
  1. ConnectionFactory的作用是什么?

连接工厂,用于常见连接的工厂类型

  1. Connection的作用是什么?

连接,用于建立访问ActiveMQ连接的类型,有连接工厂创建

  1. Session的作用是什么?

会话,一次持久有效状态的访问,有链接创建

  1. Destination & Queue的作用是什么?

目的地,用于描述本次访问ActiveMQ的消息访问目的地,即ActiveMQ服务的具体队列,由会话创建

  1. MessageProducer的作用是什么?

消息生成者,再一次有效会话中,用于发送消息给ActiveMQ服务的工具,由会话创建

  1. MessageConsumer的作用是什么?

消息消费者(消息订阅者,消息处理者),在一次有效会话中,用于从ActiveMQ服务中获取消息的工具,由会话创建.

  1. Message的作用是什么?

消息,通过消息生成者向ActiveMQ服务发送消息时使用的数据载体对象或消息消费者从ActiveMQ服务中获取消息时使用的数据载体对象,是所有消息{文本消息,对象消息等}具体类型的顶级接口,可以通过会话创建或通过会话从ActiveMQ服务中获取

1. ActiveMQ处理文本消息-创建消息生产者 
   
1. 如何创建消息生产者?
2. package
3. import
4. import
5. import
6. import
7. import
8. import
9. import
10. import
11. public class
12.  /** 
13.  * 生产消息 
14.  */ 
15. public void
16.  //定义连接工厂 
17. null; 
18.  //定义连接对象 
19. null; 
20.  //会话 
21. null; 
22.  //目的地 
23. null; 
24.  //定义消息的发送者 
25. null; 
26.  //定义消息 
27. null; 
28. try{ 
29.  /** 
30.  * userName:访问ActiveMQ服务的用户名,用户密码 默认 admin 
31.  * 用户名可以通过jettry-realm.properties文件进行修改. 
32.  * brokerURL:访问ActiveMQ服务的路径地址. 
33.  * 路径结构: 
34.  * 
35.  */ 
36. new
37.  //创建连接对象 
38.  connection =connectionFactory.createConnection(); 
39.  //启动连接 
40.  connection.start(); 
41.  /** 
42.  * transacted:事务 (是否使用事务(true或false)) 
43.  * acknowledgeMode: 
44.  * session.AUTO_ACKNOWLEDGE:自动消息确定机制 
45.  * session.CLIENT_ACKNOWLEDGE:客户端确认机制 
46.  * session.AUTO_ACKNOWLEDGE:有副本的客户端消息确认机制 
47.  */ 
48. false, session.AUTO_ACKNOWLEDGE); 
49.  //创建目的地名称,即队列的名称.消息的消费者需要通过此名称访问对应的队列. 
50.  destination = session.createQueue("helloWorld-destination"); 
51.  //创建消息的生产者 
52.  producer = session.createProducer(destination); 
53.  //创建消息对象 
54.  message = session.createTextMessage(msgTest); 
55.  //发送消息 
56.  producer.send(message); 
57. catch(Exception exception){ 
58. finally
59. if(producer!=null){ 
60. try
61.  producer.close(); 
62. catch
63.  // TODO Auto-generated catch block 
64.  e.printStackTrace(); 
65.  } 
66.  } 
67. if(session!=null){ 
68. try
69.  session.close(); 
70. catch
71.  // TODO Auto-generated catch block 
72.  e.printStackTrace(); 
73.  } 
74.  } 
75. if (connection!=null) { 
76. try
77.  connection.close(); 
78. catch
79.  // TODO Auto-generated catch block 
80.  e.printStackTrace(); 
81.  } 
82.  } 
83.  } 
84.  } 
85. } 
86. ActiveMQ处理文本消息-创建消息消费者 
   
1. 如何创建消息消费者?
87. package
88. import
89. import
90. import
91. import
92. import
93. import
94. import
95. import
96. import
97. import
98. public class
99.  /** 
100.  * 消费消息 
101.  */ 
102. public void
103.  //定义连接工厂 
104. null; 
105.  //定义连接对象 
106. null; 
107.  //会话 
108. null; 
109.  //目的地 
110. null; 
111.  //定义消息的接受者 
112. null; 
113.  //定义消息 
114. null; 
115. try{ 
116.  /** 
117.  * userName:访问ActiveMQ服务的用户名,用户密码 默认 admin 
118.  * 用户名可以通过jettry-realm.properties文件进行修改. 
119.  * brokerURL:访问ActiveMQ服务的路径地址. 
120.  * 路径结构: 
121.  * 
122.  */ 
123. new
124.  //创建连接对象 
125.  connection =connectionFactory.createConnection(); 
126.  //启动连接 
127.  connection.start(); 
128.  /** 
129.  * transacted:事务 (是否使用事务(true或false)) 
130.  * acknowledgeMode: 
131.  * session.AUTO_ACKNOWLEDGE:自动消息确定机制 
132.  * session.CLIENT_ACKNOWLEDGE:客户端确认机制 
133.  * session.AUTO_ACKNOWLEDGE:有副本的客户端消息确认机制 
134.  */ 
135. false, session.AUTO_ACKNOWLEDGE); 
136.  //创建目的地名称,即队列的名称.消息的消费者需要通过此名称访问对应的队列. 
137.  destination = session.createQueue("helloWorld-destination"); 
138.  //创建消息的接受者 
139.  consumer = session.createConsumer(destination); 
140.  //创建消息对象&接受消息 
141.  message = consumer.receive(); 
142.  //处理消息 
143.  String msg = ((TextMessage)message).getText(); 
144.  System.out.println("获取的文本信息:"+msg); 
145. catch(Exception exception){ 
146. finally
147. if(consumer!=null){ 
148. try
149.  consumer.close(); 
150. catch
151.  // TODO Auto-generated catch block 
152.  e.printStackTrace(); 
153.  } 
154.  } 
155. if(session!=null){ 
156. try
157.  session.close(); 
158. catch
159.  // TODO Auto-generated catch block 
160.  e.printStackTrace(); 
161.  } 
162.  } 
163. if (connection!=null) { 
164. try
165.  connection.close(); 
166. catch
167.  // TODO Auto-generated catch block 
168.  e.printStackTrace(); 
169.  } 
170.  } 
171.  } 
172.  } 
173. // 
174. } 
175. ActiveMQ处理对象消息 
   
1. 如何处理消息对象?
消费者:
1. //处理对象消息 
2.  ObjectMessage objectMessage = (ObjectMessage)message; 
3.  User user = (User)objectMessage.getObject(); 
4.  System.out.println(user.toString()); 
生产者:
1. //创建消息对象 
2.  message = session.createObjectMessage(user); 
3. ActiveMQ实现队列服务监听处理消息 
   
1. ActiveMQ实现队列服务监听处理消息
4. consumer.setMessageListener(new
5.  //ActiveMQ 回调的方法,通过该方法将信息传递到consumer 
6.  @Override 
7. public void
8.  //处理消息 
9. null; 
10.  //处理消息 
11. try
12.  msg = ((TextMessage)message).getText(); 
13. catch
14.  // TODO Auto-generated catch block 
15.  e.printStackTrace(); 
16.  } 
17.  System.out.println("获取的文本信息:"+msg); 
18.  } 
19.  }); 
20. Topic模型的使用
  1. 什么是Topic模型?

Publish/Subscribe 处理模式(Topic)

消息生产者(发布)将消息发布到topic中,同时有多个消费者(订阅)消费该消息.

和点对点方式不同,发布到topic的消息会被所有订阅者消费

当生产者发送消息,不管是由有消费者,都不会保留消息.

一定要先有消息的消费者,后有消息的生产者.




activemq网页查看数据 activemq查看topic消息_java