SpringBoot整合-Queue
生产者
新建Maven工程
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.yml文件
# springboot 启动端口
server:
port: 8080
# activeMQ配置
spring:
activemq:
broker-url: tcp://112.124.20.231:61616 # activeMQ服务器ip
user: admin
password: admin
# 指定连接队列还是主题
jms:
pub-sub-domain: false # false = Queue | true = Topic
# 自己定义队列名称
myQueueName: springboot-activemq-queue
3.配置bean—类似Spring的ApplicationContext.xml文件
@Component
@EnableJms //开启Springboot 的Jms
public class ConfigBean {
@Value("${myQueueName}")
private String myQueueName;
@Bean
public ActiveMQQueue queue(){
//创建一个ActiveMQQueue
return new ActiveMQQueue(myQueueName);
}
}
4.Queue_Producer
@Component
public class Queue_Producer {
//JmsMessagingTemplate是Springboot的Jms模板,Spring的是JmsTemplate
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
//把ConfigBean类的ActiveMQQueue注入进来
@Autowired
private ActiveMQQueue activeMQQueue;
//发送Queue的方法
public void producerMsg(){
jmsMessagingTemplate.convertAndSend(activeMQQueue,"*************"+ UUID.randomUUID().toString());
}
}
或者去掉@Autowired,用构造注入对象
@Component
public class Queue_Producer {
//JmsMessagingTemplate是Springboot的Jms模板,Spring的是JmsTemplate
private JmsMessagingTemplate jmsMessagingTemplate;
//把ConfigBean类的ActiveMQQueue注入进来
private ActiveMQQueue activeMQQueue;
//发送Queue的方法
public void producerMsg(){
jmsMessagingTemplate.convertAndSend(activeMQQueue,"*************"+ UUID.randomUUID().toString());
}
//构造注入对象(推荐)
public Queue_Producer(JmsMessagingTemplate jmsMessagingTemplate, ActiveMQQueue activeMQQueue) {
this.jmsMessagingTemplate=jmsMessagingTemplate;
this.activeMQQueue = activeMQQueue;
}
}
5. 主启动类
@SpringBootApplication
public class BootMqProducerApplication {
public static void main(String[] args) {
SpringApplication.run(BootMqProducerApplication.class, args);
}
}
6.单元测试
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class TestActiveMQ {
@Autowired
private Queue_Producer queue_producer;
@Test
public void testSend(){
queue_producer.producerMsg();
}
}
7. 新需求要求每3秒钟,往MQ推送消息
修改Queue_Producer
@Component
public class Queue_Producer {
//JmsMessagingTemplate是Springboot的Jms模板,Spring的是JmsTemplate
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
//把ConfigBean类的ActiveMQQueue注入进来
@Autowired
private ActiveMQQueue activeMQQueue;
//发送Queue的方法
public void producerMsg() {
jmsMessagingTemplate.convertAndSend(activeMQQueue, "*************" + UUID.randomUUID().toString());
}
//间隔3秒投递,Spring的Scheduled用来定时执行
@Scheduled(fixedDelay = 3000)
public void producerMsgScheduled() {
jmsMessagingTemplate.convertAndSend(activeMQQueue,
"*******************Scheduled" + UUID.randomUUID().toString());
System.out.println("Scheduled定时投递");
}
// //构造注入对象(推荐)
// public Queue_Producer(JmsMessagingTemplate jmsMessagingTemplate, ActiveMQQueue activeMQQueue) {
// this.jmsMessagingTemplate=jmsMessagingTemplate;
// this.activeMQQueue = activeMQQueue;
// }
}
启动类上开启定时任务@EnableScheduling
运行
消费者
新建工程
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
yml文件
# springboot 启动端口
server:
port: 8081
# activeMQ配置
spring:
activemq:
broker-url: tcp://112.124.20.231:61616 # activeMQ服务器ip
user: admin
password: admin
# 指定连接队列还是主题
jms:
pub-sub-domain: false # false = Queue | true = Topic
# 自己定义队列名称
myQueueName: springboot-activemq-queue
创建类
@Component
public class Queue_consumer {
@JmsListener(destination = "${myQueueName}")
public void consumerMsg(TextMessage textMessage) throws Exception{
String text = textMessage.getText();
System.out.println("消费者收到的消息:"+text);
}
}