代码地址:https://github.com/huiyiwu/spring-boot-message/spring-boot-activemq
1. 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
</dependency>
2. application.yaml
spring:
activemq:
user: admin
password: admin
queue-name: huchx.queue
topic-name: huchx.topic
broker-url: tcp://localhost:61616
in-memory: false
3. 启动类添加@EnableJms
@SpringBootApplication
@EnableJms //启动消息队列
public class ActiveMQApp
{
public static void main( String[] args )
{
SpringApplication.run(ActiveMQApp.class,args);
}
}
4. ActiveMQ配置
/**
* Author: Huchx
* Date: 2021/1/12 10:37
*/
@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;
@Value("${spring.activemq.queue-name}")
private String queueName;
@Value("${spring.activemq.topic-name}")
private String topicName;
@Bean(name = "queue")
public Queue queue() {
return new ActiveMQQueue(queueName);
}
@Bean(name = "topic")
public Topic topic() {
return new ActiveMQTopic(topicName);
}
@Bean
public ConnectionFactory connectionFactory(){
return new ActiveMQConnectionFactory(username, password, brokerUrl); }
@Bean
public JmsMessagingTemplate jmsMessageTemplate(){
return new JmsMessagingTemplate(connectionFactory());
}
// 在Queue模式中,对消息的监听需要对containerFactory进行配置
@Bean("queueListener")
public DefaultJmsListenerContainerFactory queueJmsListenerContainerFactory(ConnectionFactory connectionFactory){
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory());
factory.setPubSubDomain(false);
return factory;
}
//在Topic模式中,对消息的监听需要对containerFactory进行配置
@Bean("topicListener")
public DefaultJmsListenerContainerFactory topicJmsListenerContainerFactory(ConnectionFactory connectionFactory){
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory());
factory.setPubSubDomain(true);
return factory;
}
}
5. 消息生产者
/**
* Author: Huchx
* Date: 2021/1/12 11:03
*/
@RestController
public class ProducerController {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
Queue queue;
@Autowired
Topic topic;
/**
* 点对点发送
* @return
*/
@RequestMapping("queue")
public String queue(){
this.jmsMessagingTemplate.convertAndSend(this.queue,"Queue Send");
return "Queue Success Send";
}
/**
* 发布-订阅模式发送
* @return
*/
@RequestMapping("topic")
public String topic(){
this.jmsMessagingTemplate.convertAndSend(this.topic,"Topic Send");
return "Topic Success Send";
}
}
6. 消息消费者
- QueueConsumerListener.java
/**
* Author: Huchx
* Date: 2021/1/12 11:18
*/
@Component
public class QueueConsumerListener {
@JmsListener(destination = "${spring.activemq.queue-name}",containerFactory = "queueListener")
public void readActiveQueue(String msg){
System.out.println("queue接收到消息:"+msg);
}
}
- TopicConsumerListener.java
/**
* Author: Huchx
* Date: 2021/1/12 11:19
*/
@Component
public class TopicConsumerListener {
@JmsListener(destination = "${spring.activemq.topic-name}",containerFactory = "topicListener")
public void topicRecive(String msg){
System.out.println("topic接收到消息:"+msg);
}
}
7. 测试
- Queue
在浏览器中输入http://localhost:8080/queue
,结果如图:
- Topic
在浏览器中输入http://localhost:8080/topic
,结果如图: