实现消息队列
- rabbitMq
- rocketMq
- redis
- activeMq
pom所需要的jar包
1
2
3
4
5
6
7
8
9
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
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121<!-- 从阿里云仓库下载 -->
<repositories>
<repository>
<id>public</id>
<name>aliyun nexus</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<!-- 相关jar包版本号 -->
<properties>
<!-- spring版本号 -->
<spring.version>4.3.7.RELEASE</spring.version>
<!-- mybatis版本号 -->
<mybatis.version>3.4.2</mybatis.version>
<mybatis-spring-version>1.3.0</mybatis-spring-version>
<!-- log4j日志文件管理包版本 -->
<slf4j.version>1.7.7</slf4j.version>
<log4j.version>1.2.17</log4j.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>5.7.0</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.12.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- aop -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.10</version>
</dependency>
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log end -->
</dependencies>
2.新建spring配置文件,进行spring连接activemq的配置spring 的配置文件
1
2
3
4
5
6
7
8
9
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
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<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:jms="http://www.springframework.org/schema/jms"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms-4.0.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core-5.8.0.xsd">
<!-- 自动扫描 -->
<context:component-scan base-package="com.active" />
<!-- mq相关配置 -->
<!--
1.配置activemq的连接属性,可以产生消息队列的连接
id属性:为连接工厂起个名字
brokerURL属性:消息队列服务的地址
编写规则 tcp://虚拟机ip地址:61616
userName,password属性:消息队列的用户名和密码,默认都是admin
-->
<amq:connectionFactory
id="amqConnectionFactory"
brokerURL="tcp://10.0.152.229:61616"
userName="admin"
password="admin" />
<!-- spring caching 连接工厂
这个配置可以省略,主要是将产生的连接缓存起来,提升程序运行效率
这个工厂只是管理amq工厂所生产出的连接
在程序需要使用amq连接的时候,是从这个缓存工厂中获取
-->
<bean id="connectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<!-- 指定一下哪个工厂是真正生产连接的工厂 -->
<property name="targetConnectionFactory" ref="amqConnectionFactory"></property>
<property name="sessionCacheSize" value="100"></property>
</bean>
<!-- jms java message service java消息服务 -->
<!--
Spring jms Template
在程序中使用jmsTemplate 来完成对消息队列的一系列相关操作
-->
<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"></property>
<!--
消息队列的模式 取值范围 true false 默认是false
false 代表了是 生产者/消费者 模式
true 代表了是 发布者/订阅者 模式
-->
<!-- <property name="pubSubDomain" value="false"></property> -->
<property name="pubSubDomain" value="true"></property>
</bean>
<!--
创建一个队列
queue 队列 生产者/消费者
topic 主题 发布者/订阅者
-->
<bean id="myQueue" class="org.apache.activemq.command.ActiveMQQueue">
<!-- 为队列设置一个名字 -->
<!-- <constructor-arg index="0" value="my-queue" /> -->
<constructor-arg name="name" value="my-queue" />
</bean>
</beans>3.创建一个生产者类ProviderService(消息发送者)
1 | @Service |
- 4.创建一个消费者类ConsumerService(消息接收者)
1 | @Service |
- 5.创建测试类,测试发送消息和接收消息
1 | public class TestClass { |
- 测试结果:
- Springmvc
1 | <!-- ************************** SpringMvc 必要配置 begin **************************--> |
- 2.在web.xml下增加配置
如果项目的webapp文件夹下没有WEB-INF文件夹,那么新建一个即可
在WEB-INF文件夹下创建web.xml文件
1 | <?xml version="1.0" encoding="UTF-8"?> |
- controller
1 | @Controller |
6.监听者模式
以上的消费者配置是需要手动消息一条消息,什么时候需要接收消息,什么时候调用接收消息的方法即可
有些情况下,我们需要对一个队列进行监听,有消息进入到队列之后,直接进行消费创建一个监听者类
1 | /** |
- 在spring配置文件中对监听者进行配置
1 | <!-- 配置监听者 --> |
- 增加第二个监听者类
1 |
|
- 在spring配置文件中对第二个监听者类进行配置
1 | <!-- 配置第二个监听者 --> |
- 7.发布者/订阅者模式
1 | 以上,无论是手动接收消息,还是监听者自动消费消息,都是基于生产者/消费者模式 |
修改发送消息的类,向该topic发送消息
运行测试代码,测试代码还是只发送,不需要接收的代码,因为监听为自动接收
这时运行一次发送消息的代码,两个监听者都可以获取发送的消息