ActiveMQ——activemq的详细说明,queue、topic的区别(精选):https://www.cnblogs.com/lemon-flm/p/7676047.html
配置文件:
spring:
activemq:
user: admin
password: admin
broker-url: tcp://xx.xx.xxx.xx:61616
pool:
enabled: true
max-connections: 10
queuename: test
topicname: mqTopic
Configuration:
package com.egcc.egccec.config;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
import javax.jms.Queue;
import javax.jms.Topic;
/**
* @Auther: liweizhi
* @Date: 2018/11/22 14:54
* @Description:
*/
@Configuration
public class ActiveMQConfig {
@Value("${spring.activemq.queuename}")
private String queueName;
@Value("${spring.activemq.topicname}")
private String topicName;
@Value("${spring.activemq.user}")
private String usrName;
@Value("${spring.activemq.password}")
private String password;
@Value("${spring.activemq.broker-url}")
private String brokerUrl;
@Bean
public Queue queue() {
return new ActiveMQQueue(queueName);
}
@Bean
public Topic topic() {
return new ActiveMQTopic(topicName);
}
@Bean
public ActiveMQConnectionFactory connectionFactory() {
return new ActiveMQConnectionFactory(usrName, password, brokerUrl);
}
@Bean
public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ActiveMQConnectionFactory connectionFactory) {
DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
bean.setConnectionFactory(connectionFactory);
return bean;
}
@Bean
public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ActiveMQConnectionFactory connectionFactory) {
DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
//设置为发布订阅方式, 默认情况下使用的生产消费者方式
bean.setPubSubDomain(true);
bean.setConnectionFactory(connectionFactory);
return bean;
}
}
消费者:
package com.egcc.egccec.consumer;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component;
/**
* @Auther: liweizhi
* @Date: 2018/11/22 15:48
* @Description:
*/
@Component
public class ActiveMQConsumer {
/**
* queue Listener
*
* @param text
* @return
*/
@JmsListener(destination = "test", containerFactory = "jmsListenerContainerQueue")
// 将方法return回的值,再发送的"out.queue"队列中
@SendTo("out.queue")
public String consumeFromQueueTest(String text) {
System.out.println("QueueListener: consumer-a 收到一条信息: " + text);
return "consumer-a received : " + text;
}
@JmsListener(destination = "out.queue")
public void consumerMsg(String msg) {
System.out.println(msg);
}
@JmsListener(destination = "mqTopic", containerFactory = "jmsListenerContainerTopic")
public void consumeFromTopic(String text) {
System.out.println("TopicListener: consumer-a 收到一条信息: " + text);
}
}
生产者:
package com.egcc.egccec.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.jms.Queue;
import javax.jms.Topic;
/**
* @Auther: liweizhi
* @Date: 2018/11/21 17:08
* @Description:
*/
@RestController
@RequestMapping("demo")
public class DemoController {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
private Queue queue;
@Autowired
private Topic topic;
@GetMapping("hello/{name}")
public String hello(@PathVariable("name") String urlName) {
return "hello," + urlName;
}
@RequestMapping("activemq/queue/{msg}")
public String queue(@PathVariable("msg") String msg) {
jmsMessagingTemplate.convertAndSend(queue, msg);
return "queue 发送成功";
}
@GetMapping("activemq/topic/{msg}")
public String topic(@PathVariable("msg") String msg) {
jmsMessagingTemplate.convertAndSend(topic, msg);
return "topic 发送成功";
}
}