SpringBoot 整合ActiveMQ
2020-12-01 本文已影响0人
笨比乔治
七、SpringBoot 整合ActiveMQ
队列 - 生产者
1)新建Maven工程

2)引入依赖
<?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.atguigu</groupId>
<artifactId>boot-mq-producer</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--spring boot整合activemq的jar包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3)springboot启动类
@SpringBootApplication
public class MainApp_Produce {
public static void main(String[] args) {
SpringApplication.run(MainApp_Produce.class,args);
}
}
4)编写 application.yml
server:
port: 7777
spring:
activemq:
broker-url: tcp://192.168.2.180:61616 #MQ服务器地址
user: admin
password: admin
jms:
pub-sub-domain: false #false = queue true = topic
# 自己定义队列名称
myqueue: boot-activemq-queue
5)配置bean,向ioc容器中注入一个队列,并开启jms
@Configuration
@EnableJms //
public class ConfigBean {
@Value("${myqueue}")
private String myQueue;
@Bean
public Queue queue(){
return new ActiveMQQueue(myQueue);
}
}
6)编写Queue_Produce,并注入到ioc容器
@Component
public class Queue_Produce {
//SpringBoot已经自动将JmsMessagingTemplate注册到ioc容器中
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
private Queue queue;
public void produceMsg(){
jmsMessagingTemplate.convertAndSend(queue,
"***"+ UUID.randomUUID().toString().substring(0, 6));
System.out.println("消息推送到MQ成功");
}
}
7)测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestActiveMq {
@Autowired
private Queue_Produce produce;
@Test
public void test(){
produce.produceMsg();
}
}


补充:生产者间隔定投
//Queue_Produce类中加如下方法
@Scheduled(fixedDelay=3000) //三秒钟定时投递一次
public void produceMsgSchedule(){
jmsMessagingTemplate.convertAndSend(queue,
"***"+ UUID.randomUUID().toString().substring(0, 6));
System.out.println("消息推送到MQ成功");
}
// 主配置类中加如下注解
@EnableScheduling
队列 - 消费者
1)新建maven工程

2)引入pom文件(同上)
3)SpringBoot启动类
@SpringBootApplication
public class MainApp_Consumer {
public static void main(String[] args) {
SpringApplication.run(MainApp_Consumer.class,args);
}
}
4)配置文件 application.xml
server:
port: 7777
spring:
activemq:
broker-url: tcp://192.168.2.180:61616 #MQ服务器地址
user: admin
password: admin
jms:
pub-sub-domain: false #false = queue true = topic
# 自己定义队列名称
myqueue: boot-activemq-queue
5) Queue_Consumer(自动监听)
@Component
public class Queue_Consumer {
@JmsListener(destination = "${myqueue}")
public void receive(TextMessage textMessage) throws JMSException {
System.out.println("消费者接收到消息"+textMessage.getText());
}
}
启动消费者

Topic
image.png
image.png