【笔记于学习尚硅谷课程所作】
7、SpringBoot整合ActiveMQ
7.1 队列
7.1.1 生产者
- pom.xml
- application.yml
- 配置bean
- 生产者
- 主启动类
- 测试单元
1.pom.xml
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-activemq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
2.application.yml
spring:
activemq:
broker-url: tcp://192.168.111.136:61616 #自己的MQ服务器地址,用自己的
user: admin
password: admin
jms:
pub-sub-domain: false # false = Queue true = Topic
#自己定义队列名称
myqueue: boot-activemq-queue
3.配置bean
@Component
@EnableJms
public class ConfigBean{
@Value("${myqueue}")
private String myQueue;
@Bean
public Queue queue(){
return new ActiveMQQueue(myQueue);
}
}
4.生产者
@Component
public class Queue_Produce{
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
private Queue queue;
public void produceMsg(){
jmsMessagingTemplate.convertAndSend(queue,"一条消息");
System.out.println("produceMsg task is over");
}
}
5.主启动类
@SpringBootApplication
public class MainApp_Produce{
public static void main(String[] args){
SpringApplication.run(MainApp_Produce.class,args);
}
}
6.测试单元
@SpringBootTest(classes = MainApp_Produce.class)
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class TestActiveMQ{
@Resource
private Queue_Produce queue_produce;
@Test
public void testSend() throws Exception{
queue_produce.produceMsg();
}
}
7.1.2 生产者之定时投递
1.修改生产者(新增定时投递方法)
//添加定时投递方法
//间隔时间3秒钟定投
@scheduled(fixedDelay = 3000)
public void produceMsgScheduled(){
jmsMessagingTemplate. convertAndSend(queue,"一条消息");
System.out.println("send ok");
}
2.修改主启动类(直接启动主启动类,间隔发送)
//添加注解
@EnableScheduling
7.1.3 消费者
大部分步骤同生产者,这里只阐述不一样的
1.消费者
@Component
public class Queue_consumer{
@JmsListener(destination = "${myqueue}")
public void receive(TextMessage textMessage) throws JMSException{
system.out.println("消费者收到消息:"+textMessage.getText());
}
}
7.2 主题
7.2.1 生产者
部分与队列相同,只阐述不同点
1.application.yml
pub-sub-domain: true # false = Queue true = Topic
#自己定义的队列名称
myTopic: boot-activemq-topic
2.配置bean
@Component
public class ConfigBean{
@Value("${myTopic}")
private String topicName;
@Bean
public Topic topic(){
return new ActiveMQTopic(topicName);
}
}
3.生产者
@Component
public class Topic_Produce{
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
private Topic topic;
@Scheduled(fixedDelay = 3000)
public void produceTopic(){
jmsMessagingTemplate.convertAndsend(topic,"主题消息");
}
}
7.2.2 消费者
与上大致相同,不再阐述