ActiveMQ 和 JMS的關(guān)系?
ActiveMQ是流行的開源消息中間件,JMS是Java平臺(tái)定義的一種消息傳遞的標(biāo)準(zhǔn)。ActiveMQ實(shí)現(xiàn)了JMS規(guī)范,因此可以使用JMS API來(lái)與ActiveMQ進(jìn)行交互。
JMS定義了一種標(biāo)準(zhǔn)的API。API包括了一些接口和類,用于創(chuàng)建、發(fā)送、接收和處理消息。ActiveMQ實(shí)現(xiàn)了這些接口和類,并提供了一些額外的功能,例如消息持久化、消息過(guò)濾、事務(wù)支持等。
JmsMessagingTemplate跟ActiveMQ的關(guān)系?
JmsMessagingTemplate是Spring框架提供的JMS消息發(fā)送工具類,封裝了JMS API的細(xì)節(jié),使得發(fā)送JMS消息變得更加簡(jiǎn)單和方便。
JmsMessagingTemplate可以與任何實(shí)現(xiàn)了JMS規(guī)范的消息中間件集成,包括ActiveMQ。使用JmsMessagingTemplate發(fā)送消息時(shí),需要指定目標(biāo)消息隊(duì)列或主題,以及消息內(nèi)容。JmsMessagingTemplate會(huì)將消息封裝成JMS消息對(duì)象,并通過(guò)JMS API將消息發(fā)送到指定的消息隊(duì)列或主題。ActiveMQ則負(fù)責(zé)接收J(rèn)MS消息,并將其存儲(chǔ)在消息隊(duì)列或主題中,等待消費(fèi)者進(jìn)行消費(fèi)。
@JmsListener的作用?
@JmsListener是Spring JMS提供的一個(gè)注解,用于監(jiān)聽JMS消息隊(duì)列或主題,并在收到消息時(shí)執(zhí)行相應(yīng)的方法。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-712499.html
ActiveMQ用法
引入依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
</dependency>
</dependencies>
application.properties配置文件
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
# 隊(duì)列名-支持自定義
spring.activemq.queue-name=queueTest
# 主題名-支持自定義
spring.activemq.topic-name=topicTest
配置類
// 加上@EnableJms是異步,不加默認(rèn)是同步
@Configuration
public class ActiveMqConfig {
@Value("${spring.activemq.broker-url}")
private String brokerUrl;
@Value("${spring.activemq.user}")
private String userName;
@Value("${spring.activemq.password}")
private String password;
@Value("${spring.activemq.queue-name}")
private String queueName;
@Value("${spring.activemq.topic-name}")
private String topicName;
@Bean(name = "queue")
public Queue queue() {
return new ActiveMQQueue(queueName);
}
@Bean(name = "topic")
public Topic topic(){
return new ActiveMQTopic(topicName);
}
@Bean
public ConnectionFactory connectionFactory(){
return new ActiveMQConnectionFactory(userName, password, brokerUrl);
}
/**
* 在Queue模式中,對(duì)消息的監(jiān)聽需要對(duì)containerFactory進(jìn)行配置
* @param connectionFactory
* @return
*/
@Bean("queueListener")
public JmsListenerContainerFactory<?> queueJmsListenerContainerFactory(ConnectionFactory connectionFactory){
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
// false的隊(duì)列,true是主題
factory.setPubSubDomain(false);
return factory;
}
/**
* 在topic模式中,對(duì)消息的監(jiān)聽需要對(duì)containerFactory進(jìn)行配置
* @param connectionFactory
* @return
*/
@Bean("topicListener")
public JmsListenerContainerFactory<?> topicJmsListenerContainerFactory(ConnectionFactory connectionFactory){
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
// false的隊(duì)列,true是主題
factory.setPubSubDomain(true);
return factory;
}
}
生產(chǎn)者
@RestController
@RequestMapping("/activemq")
public class ProducerController {
@Resource
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
private Queue queue;
@Autowired
private Topic topic;
/**
* queue模式mq消息發(fā)送
* @param msg
* @return
*/
@GetMapping("/queue")
public String sendQueue(String msg) {
jmsMessagingTemplate.convertAndSend(queue, msg);
return "success, 發(fā)送消息:" + msg;
}
/**
* topic模式一對(duì)多的消息隊(duì)列的生產(chǎn)者
* @param msg
*/
@GetMapping("/topic")
public String sendMsgTopic(@RequestParam String msg){
jmsMessagingTemplate.convertAndSend(topic,msg);
return "success, 發(fā)送消息:" + msg;
}
}
消費(fèi)者
@Component
public class Consumer {
/**
* queue模式的消費(fèi)者
* @param msg
*/
@JmsListener(destination="${spring.activemq.queue-name}", containerFactory="queueListener")
public void queueConsumer(String msg) {
System.out.println("queue收到消息:" + msg);
}
/**
* topic模式的消費(fèi)者
* @param msg
*/
@JmsListener(destination = "${spring.activemq.topic-name}", containerFactory = "topicListener")
public void topicConsumer(String msg){
System.out.println("topic收到消息:" + msg);
}
}
原文博客:https://blog.csdn.net/imVainiycos/article/details/126021665?spm=1001.2014.3001.5506文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-712499.html
到了這里,關(guān)于ActiveMQ用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!