一、理论基础
1.1 什么是ActiveMQ
ActiveMQ是Apache出品的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE1.4规范的JMS Provider实现。JMS即Java消息服务(Java Message Service)
1.2 ActiveMQ的应用场景
ActiveMQ的优势在于安装简单、学习成本较低,而且内置管理界面。有种即插即用的感觉
缺点是对大数据量的支持比较差,数据量越大,消费和查找的速度越慢。
ActiveMQ适合对吞吐量要求较低的场景,如果是大数据场景下建议使用RocketMQ、kafka等消息队列
二、实战代码
2.1 依赖引入
<!--ActiveMq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<!--ActiveMq 连接池 -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
</dependency>
2.2 配置项
spring:
activemq:
broker-url: tcp://127.0.0.1:61616
user: admin
password: admin
pool:
enabled: true
max-connections: 50
2.3 配置文件
@Configuration
public class ActiveMqConfig {
@Value("${spring.activemq.broker-url}")
private String brokerUrl;
@Value("${spring.activemq.user}")
private String username;
@Value("${spring.activemq.password}")
private String password;
@Bean
public ConnectionFactory connectionFactory(){
return new ActiveMQConnectionFactory(username, password, brokerUrl);
}
@Bean
public JmsMessagingTemplate jmsMessageTemplate(){
return new JmsMessagingTemplate(connectionFactory());
}
@Bean("queueListener")
public JmsListenerContainerFactory<?> queueJmsListenerContainerFactory(ConnectionFactory connectionFactory){
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(false);
return factory;
}
}
2.4 consumer示例
/**
* 消费者示例
* @author smile
*/
@Component
public class DemoConsumer {
/**
* queueListener 对应 ActiveMqConfig中的Bean
*/
@JmsListener(destination="smile.event.demo", containerFactory = "queueListener")
public void receiveData(String message) {
System.out.println("!!receive message: " + message);
}
}
2.5 发送消息的简单示例
@RestController
public class DemoProducer {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@GetMapping("producer/demo")
public String producerDemo() {
jmsMessagingTemplate.convertAndSend("smile.event.demo", "producer send message demo");
return "send message success";
}
}
三、源码地址
https://github.com/lysmile/spring-boot-demo/tree/master/spring-boot-activemq-demo