1、 ActiveMQ下载
http://activemq.apache.org/download-archives.html
2、下载完成后解压,然后找到bin下的activemq start启动
启动成功后,访问:http://localhost:8161/admin,输入账号密码,默认是都是admin,账号密码可以在/conf/users.properties里修改。
3、然后创建两个项目,一个是消息提供者(provider)和 消费者(consumer),然后开始配置依赖。
<!--activemq依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<!--消息队列连接池-->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.15.0</version>
</dependency>
<!--springboot2.0以上需要加-->
<dependency>
<groupId>org.messaginghub</groupId>
<artifactId>pooled-jms</artifactId>
</dependency>
这里需要注意一点,如果你的springboot项目版本低于2.0,可以不用加pooled-jms,如果高于2.0必须加pooled-jms,否则会导致JmsMessagingTemplate注入失败。
4、配置application.properires文件,除了端口号都一样
# 端口号
server.port=3050
# activeMQ服务器地址
spring.activemq.broker-url=tcp://localhost:61616
# 账号
spring.activemq.user=yzy
# 密码
spring.activemq.password=yzy
# 等待消息发送响应的时间,设置为0等待永远。
spring.activemq.send-timeout=0
# true 表示使用内置的MQ,false则连接服务器
spring.activemq.in-memory=false
# true 表示使用连接池,false时,每发送一条数据创建一个连接
spring.activemq.pool.enabled=true
# 连接池最大连接数
spring.activemq.pool.max-connections=20
# 空闲的连接过期时间,默认为50秒
spring.activemq.pool.idle-timeout=50000
# 是否在回滚回滚消息之前停止消息传递。这意味着当启用此命令时,消息顺序不会被保留。
spring.activemq.non-blocking-redelivery=false
5、首先在启动类添加@EnableJms注解,开启消息队列
@SpringBootApplication
@EnableJms //开启消息队列
public class MqApplication {
public static void main(String[] args) {
SpringApplication.run(MqApplication.class, args);
}
}
消息提供者代码:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* description ActiveMQ消息提供者
*
* @author yanzy
* @date 2020/5/9 13:06
*/
@RestController
public class providerController {
//注入springboot封装的工具类
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
/**
* description 添加队列
*
* @param name
* @return void
* @author yanzy
* @version 1.0
* @date 2020/5/9 13:44
*/
@GetMapping("add")
public void add(String name) {
for (int x = 0; x < 50; x++) {
//添加消息到消息队列,providerMQ是队列名称
jmsMessagingTemplate.convertAndSend("providerMQ", name + x);
}
}
}
消费者代码:
import org.springframework.jms.annotation.JmsListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component;
/**
* description ActiveMQ消息消费者
*
* @author yanzy
* @date 2020/5/9 13:06
*/
@Component
public class consumerService {
/**
* 使用@JmsListener注解,配置消费者监听的队列(providerMQ)
* @SendTo注解,会将此方法返回的数据,写入到OutQueue中去
*
* @author yanzy
* @version 1.0
* @date 2020/5/9 13:33
*/
@JmsListener(destination = "providerMQ")
@SendTo("consumerMQ")
public String handleMessage(String name) {
System.out.println(name + "消息已经消费了");
return name;
}
}
然后运行消息提供者,访问:http://localhost:8161/admin/queues.jsp
可以看到50条消息已经发布上去了
上面的参数:
Number Of Pending Messages:消息队列中待处理的消息
Number Of Consumers:消费者的数量
Messages Enqueued:累计进入过消息队列的总量
Messages Dequeued:累计消费过的消息总量
运行消费者,可以看到50条消息都被消费了
爱代码,更爱生活,滴滴。