SpringBoot整合ActiveMQ

版本
- spring-boot : 2.2.2
步骤
1.创建Maven项目
这里推荐spring提供的一个非常方便的建SpringBoot工程的网站:start.spring.io。打开如下页面:
如图所示填好你的groupId, artifactId,在Dependencies栏输入activemq即可搜索出相关依赖包,点击添加。
最后点击Generate生成工程项目。Gradle工程类似操作,这里不作细叙。
2.配置文件
在工程内的application.properties文件写入:
spring.jms.pubSubDomain=false 	         #默认false, 表示默认发送/监听的destination是queue,true则为topicspring.jms.jndiName=                 #连接工厂的jndi路径,如果你的mq连接是jndi提供才填
spring.jms.cache.enabled=true 	         #是否使用session缓存,默认true
spring.jms.cache.consumers=false     #是否缓存消费者消息,默认false
spring.jms.cache.producers=true      #是否缓存消费者消息,默认true
spring.jms.cache.sessionCacheSize=1  #session缓存个数(每一个session类型)
spring.jms.template.defaultDestination=  			#默认队列名     
spring.jms.template.deliveryDelay=5S     			#延时发送时间,java8的Duration类表达式,如5S表示5秒   
spring.jms.template.deliveryMode=NON_PERSISTENT     #发送模式,有NON_PERSISTENT和PERSISTENT两个选项,即不持久化和持久化,如果有值则qosEnabled自动为true
spring.jms.template.priority=1                      #消息优先级,数字越大优先级越高,如果有值则qosEnabled自动为true
spring.jms.template.timeToLive=5S                   #消息存活时间,如果有值则qosEnabled自动为true
spring.jms.template.qosEnabled=false                #如果为true,deliveryMode、priority、timeToLive三个参数将会被使用
spring.jms.template.receiveTimeout=5000             #receive方法的超时时间
spring.jms.listener.concurrency=1                   #消费者最低线程数 
spring.jms.listener.max-concurrency=100             #消费者最高线程数  
spring.jms.listener.acknowledge-mode=DUPS_OK        #响应类型,有AUTO,CLIENT,DUPS_OK,暂不详细说明
spring.activemq.broker-url=failover:(tcp://10.10.10.31:61616,tcp://10.10.10.32:61616)?randomize=false&timeout=1000&maxReconnectDelay=5000
spring.activemq.user=admin
spring.activemq.password=password
spring.activemq.pool.enabled=true          #开启连接池,新版本需加依赖包,见pom文件
spring.activemq.pool.max-connections=100   #连接池最大连接数
我们大可以忽略上述冗长的配置,使用以下的即可:
spring.jms.template.defaultDestination=test-queuespring.activemq.broker-url=failover:(tcp://10.10.10.31:61616,tcp://10.10.10.32:61616)?randomize=false&timeout=1000&maxReconnectDelay=5000
spring.activemq.user=admin
spring.activemq.password=password
3.测试
新建两个java类:
MessageSender.java
package io.ben202.demo;import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;
@Component
public class MessageSender {
	@Autowired
	private JmsTemplate jmsTemplate;
	/**
	 * 发送消息
	 * @param message
	 */
	public void send(String message) {
		jmsTemplate.convertAndSend(message); 				//如果配置文件有默认队列名,可使用此方法
//		jmsTemplate.convertAndSend("test-queue", message);  //每次发送消息均指定队列
//		jmsTemplate.convertAndSend(new ActiveMQQueue("test-queue"), message); //每次发送消息均指定QUEUE队列
//		jmsTemplate.convertAndSend(new ActiveMQTopic("test-topic"), message); //每次发送消息均指定TOPIC队列
	}
}
MessageListener.java
package io.ben202.demo;import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class MessageListener {
	/**
	 * 处理消息
	 * @param message
	 */
	@JmsListener(destination = "test-queue")
	public void receive(String message) {
		System.out.println("message receive: " + message);
	}
}
启动类:
package io.ben202.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
@EnableJms
public class DemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}
建一个定时任务用于测试:
package io.ben202.demo;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class TestRunner{
	@Autowired
	MessageSender sender;
	@Scheduled(fixedRate = 2000)
	public void run() {
		sender.send("current time millis :" + System.currentTimeMillis());
	}
}
pom.xml
<?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.2.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>io.ben202</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</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>
		<!-- JMS连接池 -->
		<dependency>
		    <groupId>org.messaginghub</groupId>
		    <artifactId>pooled-jms</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>
执行结果:
  .   ____          _            __ _ _
 /\ / ___"_ __ _ _(_)_ __  __ _    
( ( )\___ | "_ | "_| | "_ / _` |    
 \/  ___)| |_)| | | | | || (_| |  ) ) ) )
  "  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.2.RELEASE)
2019-12-25 16:11:05.448  INFO 7400 --- [           main] io.ben202.demo.DemoApplication           : Starting DemoApplication on DESKTOP-GJ3A74T with PID 7400 (D:myworkplacedevspring-boot-activemq-demo	argetclasses started by ben in D:myworkplacejoinpay_devspring-boot-activemq-demo)
2019-12-25 16:11:05.454  INFO 7400 --- [           main] io.ben202.demo.DemoApplication           : No active profile set, falling back to default profiles: default
2019-12-25 16:11:06.431  INFO 7400 --- [           main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService "taskScheduler"
2019-12-25 16:11:06.736  INFO 7400 --- [ActiveMQ Task-1] o.a.a.t.failover.FailoverTransport       : Successfully connected to tcp://10.10.10.31:61616
2019-12-25 16:11:06.782  INFO 7400 --- [           main] io.ben202.demo.DemoApplication           : Started DemoApplication in 1.896 seconds (JVM running for 2.929)
message receive: current time millis :1577261466805
message receive: current time millis :1577261468778
message receive: current time millis :1577261470777
message receive: current time millis :1577261472777
message receive: current time millis :1577261474778
message receive: current time millis :1577261476778
message receive: current time millis :1577261478777
message receive: current time millis :1577261480778
message receive: current time millis :1577261482777
message receive: current time millis :1577261484777
message receive: current time millis :1577261486777
message receive: current time millis :1577261488778
message receive: current time millis :1577261490778
message receive: current time millis :1577261492777
4.总结
是的,有了SpringBoot,一切就是这么简单,仅需简单的几行代码即可完成对ActiveMQ的使用。当然,业务是复杂的,场景是多样的,技术不会脱离业务而存在。你在实际应用中遇到什么问题?欢迎大家踊跃提问和讨论。
个人经验:学习一门新技术,永远都要把它看得很简单,永远都是从最基础的功能应用起来。
以上是 SpringBoot整合ActiveMQ 的全部内容, 来源链接: utcz.com/z/512043.html








