1.pom依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.fengshun</groupId>
<artifactId>consumer</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
2.application.yml配置文件
spring:
activemq:
#ActiveMQ通訊地址
broker-url: tcp://192.168.1.193:61616
#用戶名
user: admin
#密碼
password: admin
#是否啟用內存模式(就是不安裝MQ,項目啟動時同時啟動一個MQ實例)
in-memory: false
packages:
#信任所有的包
trust-all: true
pool:
#是否替換默認的連接池,使用ActiveMQ的連接池需引入的依賴
enabled: false
server:
port: 9072
3.創建activeMQ配置類
package fengshun.comfig;
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
import javax.jms.ConnectionFactory;
import javax.jms.Queue;
import javax.jms.Topic;
/**
* activeMQ配置類
*/
@Configuration
@EnableJms
public class ActiveMQConfig {
@Bean
public Queue queue() {
return new ActiveMQQueue("springboot.queue") ;
}
//springboot默認只配置queue類型消息,如果要使用topic類型的消息,則需要配置該bean
@Bean
public JmsListenerContainerFactory jmsTopicListenerContainerFactory(ConnectionFactory connectionFactory){
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
//這里必須設置為true,false則表示是queue類型
factory.setPubSubDomain(true);
return factory;
}
@Bean
public Topic topic() {
return new ActiveMQTopic("springboot.topic") ;
}
}
4.消費者
package fengshun.consumer;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
/**
* @Date: 2019/10/24
* 消費者
*/
@Component
public class Consumer {
//接收queue類型消息
//destination對應配置類中ActiveMQQueue("springboot.queue")設置的名字
@JmsListener(destination="springboot.queue")
public void ListenQueue(String msg){
System.out.println("接收到queue消息:" + msg);
}
//接收topic類型消息
//destination對應配置類中ActiveMQTopic("springboot.topic")設置的名字
//containerFactory對應配置類中注冊JmsListenerContainerFactory的bean名稱
@JmsListener(destination="springboot.topic", containerFactory = "jmsTopicListenerContainerFactory")
public void ListenTopic(String msg){
System.out.println("接收到topic消息:" + msg);
}
}
