spring boot集成activemq(windows)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
1.环境配置
安装解压缩即可
注意每个版本对应的java版本不一样需要根据服务器的java版本来下载对应的mq的版本
在conf文件的路径下有个activemq.xml的配置文件文件中的这个地址需要修改一下改成127.0.0.1这样安全性更高。端口号有冲突的也需要修改一下或者kill掉占用的端口号。
2.说明
JMS
Java
Message Service
:一个规范等同于
JDBC
规范提供了与消息服务相关的
API
接口
JMS
消息模型
peer-2-peer
点对点模型
消息发送
到一个
队列中
队列
保存消息。队列
的消息只能被一个消费者
消费或超时
pub
lish-
sub
scribe
发布
订阅模型消息可以被多个消费者消费生产者和消费者完全独立不需要感知对方的
存在
ActiveMQ属于JMS类型的消息队列
3.服务启动
进入到安装目录下这是我的安装目录点击启动脚本完成启动。
D:\queue\apache-activemq-5.16.5\bin\win64
启动成功的场合
可以通过 http://127.0.0.1:8161/进行到消息队列的管理界面用户名和密码都是admin。
进入之后能够看到相应的队列信息。
queues代表点对点模式发送的消息可以看到消费者信息消息的信息。
topics代表发布订阅模式发送的消息也可以看到消费者的信息消息的信息。
4.示例
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
配置文件
spring:
activemq:
broker-url: 127.0.0.1:61616
jms:
pub-sub-domain: true
template:
default-destination: orderInfoamation
jms的配置主要是设置消息的类型是点对点还是发布订阅模式默认是点对点模式将pub-sub-domain设置为true则表示是发布订阅模式
default-destination表示设置一个默认的名字用来存放消息一般不用指定可以在代码中进行设置
service层
package com.example.demo.activemq.impl;
import com.example.demo.activemq.ActivemqService;
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service;
/**
* @author linaibo
* @version 1.0
* Create by 2023/1/16 13:55
*/
@Service
public class ActivemqServiceImpl implements ActivemqService {
@Autowired
private JmsMessagingTemplate messagingTemplate;
@Override
public void sendMessage(String msg) {
System.out.println("activemq发送topic消息"+msg);
ActiveMQTopic topic_test = new ActiveMQTopic("topic_test");
messagingTemplate.convertAndSend(topic_test,msg);
System.out.println("activemq发送queue消息"+msg);
ActiveMQQueue queue_test = new ActiveMQQueue("queue_test");
messagingTemplate.convertAndSend(queue_test,msg);
}
}
注入JmsMessagingTemplate对象之后创建对应的发布消息的模式进行消息的发布
配置类
package com.example.demo.activemq.config;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;
import javax.jms.ConnectionFactory;
/**
* @author linaibo
* @version 1.0
* Create by 2023/1/16 14:46
*/
@Component
public class activemqConfig {
@Bean
ConnectionFactory connectionFactory() {
return new ActiveMQConnectionFactory();
}
@Bean
JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) {
JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
jmsTemplate.setPriority(999);
return jmsTemplate;
}
@Bean(value="jmsMessagingTemplate")
JmsMessagingTemplate jmsMessagingTemplate(JmsTemplate jmsTemplate) {
JmsMessagingTemplate messagingTemplate = new JmsMessagingTemplate(jmsTemplate);
return messagingTemplate;
}
@Bean(name="queueListenerContainerFactory")
public JmsListenerContainerFactory queueListenerContailerFactory(ConnectionFactory connectionFactory){
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(false);
return factory;
}
@Bean(name="topicListenerContainerFactory")
public JmsListenerContainerFactory topicListenerContainerFactory(ConnectionFactory connectionFactory){
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(true);
return factory;
}
}
配置类中设置JmsMessagingTemplate以及队列和主题这两种消息模式。
监听器
package com.example.demo.activemq.listener;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
/**
* @author linaibo
* @version 1.0
* Create by 2023/1/16 13:58
*/
@Component
public class ActivemqListener {
@JmsListener(destination = "topic_test",containerFactory = "topicListenerContainerFactory")
public void reciveTopic1(String msg) {
System.out.println("接收到active的topic消息1:" + msg);
}
@JmsListener(destination = "topic_test",containerFactory = "topicListenerContainerFactory")
public void reciveTopic2(String msg) {
System.out.println("接收到active的topic消息2:" + msg);
}
@JmsListener(destination = "queue_test",containerFactory = "queueListenerContainerFactory")
public void reciveQueue(String msg) {
System.out.println("接收到active的queue消息:" + msg);
}
}
监听器中要对destination及 containerFactory进行设置通过消息名称和模式来进行监听。点对点模式只有一个消费者能够消费消息而发布订阅模式有多个消费者可以消费这一条消息。
5.总结
按照上面这种方式来进行消息的发布可以进行点对点或者发布订阅模式的消息发送如果在配置文件中指定了点对点或者发布订阅模式的时候只能进行一种消息的发送。