ActiveMq的高级特性
1 ActiveMQ传输协议
1.默认的 61616 端口如何修改?
命令如下:
vim conf/activemq.xml
进入如图所示的界面:
修改为如图所示:
2.生产环境上的连接协议如何配置?使用tcp吗?
如上图即可。
2 ActiveMQ传输协议有那些?
学习文档的官方:http://activemq.apache.org/configuring-transports
1.Transmission Control Protocol(TCP)默认
1)这是默认的Broker配置,TCP的Client监听端口61616。
2)在网络传输数据前,必须要序列化数据,消息是通过一个叫wire protocol的来序列化成字节流。默认情况下ActiveMQ把wire protocol叫做openwire,它的目的是促使网络上的效率和数据快速交互。
3)TCP连接的URI形式:tcp://hostname:port?key=value&key=value,后面的参数是可选。
4)TCP传输的优点:
4.1)TCP协议传输可靠性高,稳定性强。
4.2)高效性:字节流方式传递,效率高。
4.3)有效性、可用性:应用广泛,支持任何平台。
2.New I/O API Protocol(NIO)
1)NIO协议和TCP协议类似,但NIO更侧重于底层的访问操作。它允许开发人员对同一资源可有更多的client调用和服务端有更多的负载。
2)适合使用NIO协议的场景:
2.1)可能有大量的client连接到Broker上,一般情况下,大量的client去连接Broker是被操作系统的线程所限制的,因此,NIO的实现比TCP需要更少的线程去运行,所有建议使用NIO协议。
2.2)可能对于Broker有一个很迟钝的网络传输,NIO比TCP提供更好的性能。
3)NIO连接的URI形式:nio://hostname:port?key=value。
<transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:61618?maximumConnections=1000&wireFormat.maxFrameSize=104857600&org.apache.activemq.transport.nio.SelectorManager.corePoolSize=20&org.apache.activemq.transport.nio.SelectorManager.maximumPoolSize=50"/>
ActiveMQ支持的网络协议总结,如图所示:
3 NIO案例演示
1.修改 /conf/activemq.xml 配置文件,在 标签内添加一个新的节点:
<transportConnector name="nio" uri="nio://0.0.0.0:61618"/>
如图所示:
2.修改 brokerURL
4 NIO增强案例演示
1.修改 /conf/activemq.xml 配置文件,在 标签内修改上面新添加的 nio 节点。
<transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:61618?maximumConnections=1000&wireFormat.maxFrameSize=104857600&org.apache.activemq.transport.nio.SelectorManager.corePoolSize=20&org.apache.activemq.transport.nio.Se5lectorManager.maximumPoolSize=50"/>
5 ActiveMQ消息存储和持久化
1.ActiveMQ持久化机制?MQ服务器宕机了,消息会不会丢失?
为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,消息系统一般都会采用持久化机制。ActiveMQ的消息持久化机制有 JDBC、AMQ、KahaDB 和 LevelDB,无论使用哪种持久化方式,消息的存储逻辑都是一致的。就是发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内存数据库或者远程数据库等,再试图将消息发送给接收者,成功则将消息从存储中删除,失败则继续尝试发送。消息中心启动后首先要检查指定的存储位置,如果有未发送成功的消息,则需要把消息发送出去。
2.有哪些?
2.1) http://activemq.apache.org/persistence
2.2)AMQ Message Sotre(了解)如图所示:
2.3)KahaDB(默认)如图所示:
2.4)LevelDB(了解)如图所示:
2.5)JDBC
2.6)JDBC Message Store with ActiveMQ Journal
3.JDBC 消息存储 如图所示:
3.1 实现步骤
1)添加MySQL数据库驱动包拷贝到 activemq/lib 目录。如图所示:
2)修改 activemq.xml 配置文件。
修改之前的命令如下:
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
修改之后的命令如下:
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="true"/>
</persistenceAdapter>
修改之后如图所示:
数据库连接池配置的命令如下:
<bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.171.131:3306/activemq?relaxAutoCommit=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="maxTotal" value="200"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
修改之后如图所示:
3)创建数据库和表。
1.创建数据库:CREATE DATABASE activemq,如图所示:
2.重启activemq,会自动在activemq数据库中创建3张表。
重启activemq如图所示:
会自动在activemq数据库中创建3张表,如图所示:
如果报如图所示的错误。
解决办法的步骤如下:
1).修改mysql访问权限的命令如下:
mysql -uroot -p密码
use mysql;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'txw4' IDENTIFIED BY '123456' WITH GRANT OPTION;
flush privileges;
如图所示:
2).因为txw4是虚拟机名称,修改的命令如下:
vim /etc/hostname
修改为如图所示:
3使用如下命令进行修改域名映射关系:
vim /etc/hosts
修改为如图所示:然后reboot重新启动虚拟机。
4).修改mysql的配置文件命令如下:
vim /etc/my.cnf
在配置文件中增加代码如下:
port=3306
bind-address=0.0.0.0
修改为如图所示:
5).重新启动mysql服务的命令如下:
service mysql restart
如图所示,说明重启成功!
3.activemq_msgs 消息表,queue和topic都存在里面。
ID:自增的数据库主键
CONTAINER:消息的Destination
MSGID_PROD:消息发送者的主键
MSGID_SEQ:发送消息的顺序,MSGID_PROD+MSG_SEQ可以组成JMS的MessageID
EXPIRATION:消息的过期时间,存储的是从1970-01-01到现在的毫秒数
MSG:消息本体的Java序列化对象的二进制数据
PRIORITY:优先级,从0-9,数值越大优先级越高
4.activemq_acks,用于存储订阅关系。如果是持久化Topic,订阅者和服务器的订阅关系在这个表保存。
CONTAINER:消息的Destination
SUB_DEST:如果是使用Static集群,这个字段会有集群其它系统的信息
CLIENT_ID:每个订阅者都必须有一个唯一的客户端ID用以区分
SUB_NAME:订阅者名称
SELECTOR:选择器,可选择只消费满足条件的消息。条件可以用自定义属性实现,可支持多属性AND和OR操作
LAST_ACKED_ID:记录消费过的消息的ID
5.activemq_acks,用于存储订阅关系。如果是持久化Topic,订阅者和服务器的订阅关系在这个表保存。
4)代码运行验证
1.Topic一定要开启持久化,Queue默认是持久化模式。
messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
2.Queue点对点类型中的消息一旦被 Consumer 消费,消息就从 broker或数据库中删除。
3.Topic 主题消息被 Consumer 消费,消息不会从 broker 或 数据库中删除。
5)总结
1.Queue:在没有消费者消费的情况下,会将消息保存到 activemq_msgs 表中,只要有任意一个消费者已经消费过了,消费之后这些消息将会立即被删除。
2.Topic:一般是先启动消费者订阅,然后再生产的情况下,会将主题保存到activemq_acks 表中。
6)开发踩坑
1.数据库 jar 包:需要将相关数据的驱动 jar 包放到 ActiveMQ 安装目录的 lib 目录。若使用其它的连接池,还需要将连接池的 jar 包也放入。
2.createTablesOnStartup 属性:在 jdbcPersistenceAdapter 标签中设置了 createTablesOnStartup 属性为 true 时,在第一次启动 ActiveMQ 时,ActiveMQ 服务节点会自动创建所需要的数据表。启动完成后可以去掉这个属性,或者更改 createTablesOnStartup 属性为 false。
7)JDBC Message Store with ActiveMQ Journal
1.这种方式克服了 JDBC Store 的不足,JDBC 每次消息过来,都需要去写库和读库。ActiveMQ Journal 使用高速缓存写入技术,大大提高了性能。
修改之前的命令如下:
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="true"/>
</persistenceAdapter>
修改之后的命令如下:
<persistenceFactory>
<journalPersistenceAdapterFactory journalLogfiles="4" journalLogfileSize="32768" useJournal="true" useQuickJournal="true" dataSource="#mysql-ds" dataDirectory="activemq-data"/>
</persistenceFactory>
6 ActiveMQ多节点集群
1.引入消息队列后如何保证其高可用性?
2.是什么呢?
基于Zookeeper和LevelDB搭建ActiveMQ集群。
集群仅提供主备方式的高可用集群功能,避免单点故障。
3.主从集群。
1)Shared File System Master Slave(KahaDB默认)。
2)JDBC Master Slave。
3)Replicated LevelDB Store。
Zookeeper + Replicated LevelDB Store的主从集群:
http://activemq.apache.org/replicated-leveldb-store
4.高级特性
1)异步投递。
2)延时投递和定时投递。
3)消费重试机制。
4)死信队列。
5)防止重复调用。
7 搭建队列环境
7.1 搭建生产者
1.导入相应的依赖jar包的代码如下:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.txw</groupId>
<artifactId>activemq-boot-produce</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>activemq-boot-produce</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.在resources目录下创建application.yml的代码如下:
server:
port: 8000
spring:
activemq:
broker-url: tcp://192.168.171.131:61616 # mq 服务器地址
user: admin
password: admin
jms:
pub-sub-domain: false # false: Queue, true: Topic, 默认 false
# 定义队列名
queue-name: boot-active-queue
3.编写Bean配置类的代码如下:
package com.txw.mq.config;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import javax.jms.Queue;
/**
* Bean配置类
* @author:Adair
*/
@SuppressWarnings("all") // 注解警告信息
@Configuration
// 开启 JMS 适配注解
@EnableJms
public class BeanConfig {
/* 读取 Spring Boot 配置文件中的自定义属性 */
@Value("${queue-name}")
private String queueName;
@Bean
public Queue queue () {
return new ActiveMQQueue(queueName);
}
}
4.编写消息发送类的代码如下:
package com.txw.mq.produce;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.jms.Queue;
import java.util.UUID;
/**
* 消息发送类
* @author:Adair
*/
@SuppressWarnings("all") // 注解警告信息
@Component
public class QueueProduce {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
private Queue queue;
/**
* 发送消息
* 触发投递(手动)
*/
public void produceMessage () {
jmsMessagingTemplate.convertAndSend(queue, UUID.randomUUID().toString().substring(0,6));
System.out.println("***消息成功发送到队列");
}
/**
* 每隔3m定时投递
* 间隔定投(自动)
*/
@Scheduled(fixedDelay = 3000)
public void produceMessageScheduled () {
jmsMessagingTemplate.convertAndSend(queue, "Scheduled: " + UUID.randomUUID().toString().substring(0,6));
System.out.println("***消息定时成功发送到队列");
}
}
5.编写主启动类的代码如下:
package com.txw.mq;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SuppressWarnings("all") // 注解警告信息
@SpringBootApplication
// 开启定时投递
@EnableScheduling
public class ActivemqBootProduceApplication {
public static void main(String[] args) {
SpringApplication.run(ActivemqBootProduceApplication.class, args);
}
}
6.编写测试的代码如下:
package com.txw.mq;
import com.txw.mq.produce.QueueProduce;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.web.WebAppConfiguration;
/**
* 单元测试类
*/
@SuppressWarnings("all") // 注解警告信息
@SpringBootTest(classes = ActivemqBootProduceApplication.class)
@ExtendWith(SpringExtension.class)
@WebAppConfiguration
public class QueueProduceTest {
@Autowired
private QueueProduce queueProduce;
@Test
void testProduceMessage () {
queueProduce.produceMessage();
}
}
7.2 搭建消费者
1.导入相应的依赖jar包的代码如下:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.txw</groupId>
<artifactId>activemq-boot-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>activemq-boot-consumer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.在resources目录下创建application.yml的代码如下:
server:
port: 8000
spring:
activemq:
broker-url: tcp://192.168.171.131:61616 # mq 服务器地址
user: admin
password: admin
jms:
pub-sub-domain: false # false: Queue, true: Topic, 默认 false
# 定义队列名
queue-name: boot-active-queue
3.编写消息接收类的代码如下:
package com.txw.mq.consumer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;
import javax.jms.JMSException;
import javax.jms.TextMessage;
/**
* 消息接收类
* @author:Adair
*/
@SuppressWarnings("all") // 注解警告信息
@Component
public class QueueConsumer {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
/**
* 消费消息
* @param textMessage
* @throws JMSException
*/
@JmsListener(destination = "${queue-name}")
public void recevie (TextMessage textMessage) throws JMSException {
System.out.println("******" + textMessage.getText());
}
}
4.编写主启动类的代码如下:
package com.txw.mq;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SuppressWarnings("all") // 注解警告信息
@SpringBootApplication
public class ActivemqBootConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ActivemqBootConsumerApplication.class, args);
}
}
8 搭建Topic环境
8.1 搭建生产者
1.导入相应的依赖jar包的代码如下:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.txw</groupId>
<artifactId>activemq-boot-topic-produce</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>activemq-boot-topic-produce</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.在resources目录下创建application.yml的代码如下:
server:
port: 8000
spring:
activemq:
broker-url: auto+nio://192.168.171.131:61619 # mq 服务器地址
user: admin
password: admin
jms:
pub-sub-domain: true # false: Queue, true: Topic, 默认 false
# 定义队列名
topic-name: boot-active-topic
3.编写Bean配置类的代码如下:
package com.txw.mq.config;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import javax.jms.Topic;
/**
* Bean 配置类
* @author:Adair
*/
@SuppressWarnings("all") // 注解警告信息
@Configuration
@EnableJms
public class ConfigBean {
@Value("${topic-name}")
private String topicName;
@Bean
public Topic topic() {
return new ActiveMQTopic(topicName);
}
}
4.编写消息发送类的代码如下:
package com.txw.mq.produce;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.jms.Topic;
import java.util.UUID;
/**
* TODO
* @author:Adair
*/
@SuppressWarnings("all") // 注解警告信息
@Component
public class TopicProduce {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
private Topic topic;
/**
* 间隔定投消息
*/
@Scheduled(fixedDelay = 3000)
public void produceMessage () {
jmsMessagingTemplate.convertAndSend(topic,"Topic: " + UUID.randomUUID().toString().substring(0,6));
System.out.println("******主题消息已发送到MQ服务器");
}
}
5.编写主启动类的代码如下:
package com.txw.mq;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SuppressWarnings("all") // 注解警告信息
@SpringBootApplication
@EnableScheduling
public class ActivemqBootTopicProduceApplication {
public static void main(String[] args) {
SpringApplication.run(ActivemqBootTopicProduceApplication.class, args);
}
}
8.2 搭建消费者
1.导入相应的依赖jar包的代码如下:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.txw</groupId>
<artifactId>activemq-boot-topic-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>activemq-boot-topic-consumer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.在resources目录下创建application.yml的代码如下:
server:
port: 8002
spring:
activemq:
broker-url: auto+nio://192.168.171.131:61619 # mq 服务器地址
user: admin
password: admin
jms:
pub-sub-domain: true # false: Queue, true: Topic, 默认 false
# 定义队列名
topic-name: boot-active-topic
3.编写主题消息接收类的代码如下:
package com.txw.mq.consumer;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
import javax.jms.JMSException;
import javax.jms.TextMessage;
/**
* 主题消息接收类
* @author:Adair
*/
@SuppressWarnings("all") // 注解警告信息
@Component
public class TopicConsumer {
@JmsListener(destination = "${topic-name}")
public void recevie (TextMessage textMessage) throws JMSException {
System.out.println(textMessage.getText());
}
}
4.编写主启动类的代码如下:
package com.txw.mq;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SuppressWarnings("all") // 注解警告信息
@SpringBootApplication
public class ActivemqBootTopicConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ActivemqBootTopicConsumerApplication.class, args);
}
}