今天在看项目的时候,看到了有关消息队列的代码,很多东西都是我不知道的,所以特地去查看了一下有关这方面的知识,然后将它总结了一下,希望可以帮到我自己,帮到你们。
什么是mq?为什么要使用mq?
mq是message queue 消息队列,也叫消息中间件,是一种跨进程的通信机制,用于上下游传递消息,是类似于数据库一样需要独立部署在服务器上的一种应用,提供接口给其他系统调用。mq支持两种不同的应用程序编程接口:Java 消息服务(JMS)和消息队列接口(MQI)。
应用场景
1.分布式事务
2.实时计算
3.物联网应用
4.大规模缓存同步
常见的mq的类型
activeMQ 对java支持良好,缺点是对其他语言支持不够友好,适合中小企业系统
rabbitMQ 对java支持良好,对其他语言也支持良好,跨平台,语言无关
kaffka 日志消息中间件 支持大数据场景
JMS规范
JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
该规范中包含了
提供者:实现jms规范的中间件服务器
客户端:发送或者接受消息的应用程序
生产者/发布者:创建并发送消息的客户端
消费者/订阅者:接受并处理消息的客户端
消息:应用程序之间传递的内容
消息模式:在客户端之间传递消息的方式,jms中定义了主题和队列两种模式
主题模式:假如发布者发布了100条消息,那么如果有n个订阅者,每个订阅者都可以获取到100条消息。
队列模式:假如生产者发送了100条消息,如果有n个消费者,那么每个订阅者加起来获取到的消息总数是100。
jms约定的接口
ConnectionFactory:获取与MQ服务连接的工厂类
Connection:与MQ服务的连接, 由ConnectionFactory 创建
Session:会MQ服务的会话 由Connection 创建
MessageProducer :消息生产者,由Session 创建
MessageConsumer: 消息消费者 由Session创建
Message :消息,由Session创建
Desination :消息的目的地
原生实际代码例子
原生mq用法 队列, 创建生产者消费者模式
生产者发送消息
1.创建connectionFactory 与mq服务器进行连接
ConnectionFactory connectionFactory=new XXMQConnectionFactory(url) ; //XX 为该mq的实现 比如activeMQ rabbitMQ等
// url为服务器地址 tcp格式 比如 tcp://xxxx:xxx
2.创建Connection
Connection connection=connectionFactory.createConnection();
3.启动连接
connection,start();
4.创建会话
Session session=connection.createSession(XXX); //xx为该session的创建时候的参数 比如设定事务,模式等等,具体依据不同的实现形式
5.创建一个目标
Destination destination=session.createQueue(queueName);
6.创建一个生产者
MessageProducer producer=session.createProducer(destination);
7.创建消息
TextMessage textMessage=session.createTextMessage("text");
8.发送消息
producer.send(textMessage);
9.关闭连接
connection.close();
消费者获取消息
1.创建connectionFactory 与mq服务器进行连接
ConnectionFactory connectionFactory=new XXMQConnectionFactory(url) ; //XX 为该mq的实现 比如activeMQ rabbitMQ等
// url为服务器地址 tcp格式 比如 tcp://xxxx:xxx
2.创建Connection
Connection connection=connectionFactory.createConnection();
3.启动连接
connection,start();
4.创建会话
Session session=connection.createSession(XXX); //xx为该session的创建时候的参数 比如设定事务,模式等等,具体依据不同的实现形式
5.创建一个目标
Destination destination=session.createQueue(queueName);
6.创建一个消费者
MessageConsumer consumer=session.createConsumer(destination);
7.创建一个监听器
consumer.setMessageListener(
new MessageListener(){
public void onMessage(Message message){
TextMessage textMessage=(TextMessage)message;
8.获取消息
textMessage.getText();
}});
9.关闭连接
connection.close();
原生mq用法 主题, 创建发布者 订阅者模式
发布者
1.创建connectionFactory 与mq服务器进行连接
ConnectionFactory connectionFactory=new XXMQConnectionFactory(url) ; //XX 为该mq的实现 比如activeMQ rabbitMQ等
// url为服务器地址 tcp格式 比如 tcp://xxxx:xxx
2.创建Connection
Connection connection=connectionFactory.createConnection();
3.启动连接
connection,start();
4.创建会话
Session session=connection.createSession(XXX); //xx为该session的创建时候的参数 比如设定事务,模式等等,具体依据不同的实现形式
5.创建一个目标
Destination destination=session.createTopic(topicName);
6.创建一个生产者
MessageProducer producer=session.createProducer(destination);
7.创建消息
TextMessage textMessage=session.createTextMessage("text");
8.发送消息
producer.send(textMessage);
9.关闭连接
connection.close();
订阅者
1.创建connectionFactory 与mq服务器进行连接
ConnectionFactory connectionFactory=new XXMQConnectionFactory(url) ; //XX 为该mq的实现 比如activeMQ rabbitMQ等// url为服务器地址 tcp格式 比如 tcp://xxxx:xxx
2.创建Connection
Connection connection=connectionFactory.createConnection();
3.启动连接
connection,start();
4.创建会话
Session session=connection.createSession(XXX); //xx为该session的创建时候的参数 比如设定事务,模式等等,具体依据不同的实现形式
5.创建一个目标
Destination destination=session.createTopic(topicName);
6.创建一个消费者
MessageConsumer consumer=session.createConsumer(destination);
7.创建一个监听器
consumer.setMessageListener(
new MessageListener(){
public void onMessage(Message message){
TextMessage textMessage=(TextMessage)message;
8.获取消息
textMessage.getText();
}});
9.关闭连接
connection.close();
参考文章:https://blog.csdn.net/qq_20009015/article/details/81409346