关于mq(消息队列)的一些介绍

     今天在看项目的时候,看到了有关消息队列的代码,很多东西都是我不知道的,所以特地去查看了一下有关这方面的知识,然后将它总结了一下,希望可以帮到我自己,帮到你们。

什么是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

 

 

 

 

你可能感兴趣的:(关于mq(消息队列)的一些介绍)