什么是ActiveMQ
- ActiveMQ是消息队列技术,为解决高并发问题而生
- ActiveMQ生产者消费者模型(生产者和消费者可以跨平台、跨系统)
ActiveMQ支持如下两种消息传输方式
- 点对点模式,生产者生产了一个消息,只能由一个消费者进行消费
- 发布/订阅模式,生产者生产了一个消息,可以由多个消费者进行消费
下载ActiveMq
下载地址
选择对应的版本下载,下载完成后是一个压缩包,进行解压,根据自己的系统选择32位或者64位,cmd进入对应的bin目录,执行activemq.bat进行启动
创建生产者
- 添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency> <!--消息队列连接池--> <dependency> <groupId>org.messaginghub</groupId> <artifactId>pooled-jms</artifactId> </dependency>
- application.properties配置
spring.activemq.broker-url=tcp://localhost:61616
#true 表示使用内置的MQ,false则连接服务器
spring.activemq.in-memory=false
#true表示使用连接池;false时,每发送一条数据创建一个连接
spring.activemq.pool.enabled=true
#连接池最大连接数
spring.activemq.pool.max-connections=10
#空闲的连接过期时间,默认为30秒
spring.activemq.pool.idle-timeout=30000
- 启动类添加注解
@SpringBootApplication
@EnableJms//启动消息队列
public class DemoWebApplication {public static void main(String[] args) { SpringApplication.run(DemoWebApplication.class, args); }
}
- 发送消息
@RestController
@RequestMapping("/mq")
public class providerController {
//注入springboot封装的工具类
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;@GetMapping("/send") @ApiOperation(value = "发送消息") public void send(String name) { //系统会自行创建名为ms.cxd.test.amq的队列 name表示发送的内容 jmsMessagingTemplate.convertAndSend("gms.cxd.test.amq", name); } }
- 创建消费者
新建一个springboot项目,添加依赖和配置文件和生产者类似
@Component
public class ConsumService {@JmsListener(destination = "gms.cxd.test.amq") public void getMsg(String name){ System.out.println("接收到的消息是"+name); } }
- 启动生产者项目,使用swagger测试,依次发送消息 name1 name2 name3
- 启动消费者项目,查看接收信息
这只是最简单的使用,大家可以根据具体项目具体业务进行修改扩展