SpringBoot整合ActiveMQ

Lou.Chen
大约 2 分钟

SpringBoot整合ActiveMQ

一、安装ActiveMQ

这里我们采用docker安装

1、搜索镜像

docker search activemq

2、拉取镜像

docker pull webcenter/activemq

3、初始化容器

61616 为通信端口

8161 为管理界面

docker run -d --name activemq01 -p 61616:61616 -p 8161:8161 webcenter/activemq

4、访问activemq

xxx.xxx.xxx.xxx:8161open in new window

默认用户名和密码为 admin/admin

二、springboot整合ActiveMQ

1、pom.xml

spring-boot-starter-activemq

<?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.5.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>org.lc</groupId>
	<artifactId>activemq</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>activemq</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.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</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、实体消息bean
@Getter
@Setter
@ToString
public class Message implements Serializable {
    /**
     * 发送的消息内容
     */
    private String content;
    /**
     * 发送的日期
     */
    private Date sendDate;
}

3、队列配置
@Configuration
public class QueueConfig {
    /**
     * 新建队列
     * @return
     */
    @Bean
    Queue queue() {
        return new ActiveMQQueue("hello.lc");
    }
}

4、jms配置

@Component
public class JmsComponent {

    /**
     * jms(java messgae service(java消息服务) )消息模板
     */
    @Autowired
    JmsMessagingTemplate jmsMessagingTemplate;

    @Autowired
    Queue queue;

    /**
     * 生产者
     * @param message
     */
    public void send(Message message) {
        //发送的目的地(指定队列) ; 发送的消息对象
        jmsMessagingTemplate.convertAndSend(this.queue,message);
    }

    /**
     * 消费者
     * JmsListener监听消息队列 destination 指定队列的名称
     * @param message
     */
    @JmsListener(destination = "hello.lc")
    public void receive(Message message){
        System.out.println(message);
    }

}

4、properties配置
#activemq代理的url
spring.activemq.broker-url=tcp://47.96.141.44:61616
#发送消息时可为字符串或者一个对象。若为一个对象,则需要设为true
#信任所有的包  如果传输的对象是Obeject 这里必须加上这句或者指定信任的包  否则会导致对象序列化失败
spring.activemq.packages.trust-all=true
spring.activemq.user=admin
spring.activemq.password=admin
5、测试使用
@SpringBootTest
class ActivemqApplicationTests {

	//默认注入单例
	@Autowired
	JmsComponent jmsComponent;

	@Test
	void contextLoads() {
		Message message = new Message();
		message.setContent("hello lc");
		message.setSendDate(new Date());
		jmsComponent.send(message);
	}

}