资讯专栏INFORMATION COLUMN

消息队列学习(二)

XFLY / 865人阅读

摘要:的全称是,即消息服务。它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息。会话是生产和消费消息的一个单线程上下文。消息消息由以下三部分组成消息头。

今天我们以ActiveMQ为例进行一系列的学习

Apache ActiveMQ是Apache软件基金会所研发的开放源码消息中间件;由于ActiveMQ是一个纯Java框架,那么我们先要了解下java中的JMS。

JMS的全称是Java Message Service,即Java消息服务。它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息。把它应用到实际的业务需求中的话我们可以在特定的时候利用生产者生成一消息,并进行发送,对应的消费者在接收到对应的消息后去完成对应的业务逻辑。对于消息的传递有两种类型,一种是点对点的,即一个生产者和一个消费者一一对应;另一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收。

JMS基本构成 1、连接工厂

连接工厂是客户用来创建连接的对象,例如 ActiveMQ 提供的
ActiveMQConnectionFactory。

2、 连接

JMS Connection 封装了客户与 JMS 提供者之间的一个虚拟的连接。

3、会话

JMS Session 是生产和消费消息的一个单线程上下文。会话用于创建消息生
产者(producer)、消息消费者(consumer)和消息(message)等。会话提供
了一个事务性的上下文,在这个上下文中,一组发送和接收被组合到了一个原子
操作中。

4、 目的地

目的地是客户用来指定它生产的消息的目标和它消费的消息的来源的对象。
JMS1.0.2 规范中定义了两种消息传递域:点对点(PTP)消息传递域和发布/订阅
消息传递域。

5、消息生产者

消息生产者是由会话创建的一个对象,用于把消息发送到一个目的地。

6、消息消费者

消息消费者是由会话创建的一个对象,它用于接收发送到目的地的消息。

7、消息

JMS 消息由以下三部分组成:
• 消息头。每个消息头字段都有相应的 getter 和 setter 方法。
• 消息属性。如果需要除消息头字段以外的值,那么可以使用消息属性。
• 消息体。JMS 定义的消息类型有 TextMessage、MapMessage、BytesMessage、
StreamMessage 和 ObjectMessage。

来看下具体代码:
生产者
  // 1.初始化connection工厂  
   ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
     ActiveMQConnection.DEFAULT_PASSWORD, BROKE_URL);
   // 2.创建Connection  
   connection = factory.createConnection();
   // 3.打开连接  
   connection.start();
   // 4.创建session  
   session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
   // 5.创建消息目的地  
   Destination destination = session.createQueue(DESTINATION);
   //6.创建生产者
   MessageProducer producer = session.createProducer(destination);
   //7.配置消息持久化
   producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
   //8.发送消息
   sendMessage(session, producer);
   //9.事务提交
   session.commit();
消费者
           // 1.初始化connection工厂  
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();  
  
            // 2.创建Connection  
            connection = connectionFactory.createConnection();  
  
            // 3.打开连接  
            connection.start();  
  
            // 4.创建session  
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
  
            // 5.创建消息目标  
            Destination destination = session.createTopic("YD");  
  
            //6.创建消费者  
            MessageConsumer consumer = session.createConsumer(destination);  
              
            //7.配置监听  
            consumer.setMessageListener(this);  

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66442.html

相关文章

  • 消息中间件——RabbitMQ()各大主流消息中间件综合对比介绍!

    摘要:主流消息中间件介绍是由出品,是一个完全支持和规范的实现。主流消息中间件介绍是阿里开源的消息中间件,目前也已经孵化为顶级项目。 showImg(https://img-blog.csdnimg.cn/20190509221741422.gif);showImg(https://img-blog.csdnimg.cn/20190718204938932.png?x-oss-process=...

    hiyang 评论0 收藏0
  • RabbitMQ+PHP 教程(Work Queues)

    摘要:平均每个消费者将得到相同数量的消息。消息确认完成任务可能需要几秒钟。为了确保消息不会丢失,支持消息确认。没有任何消息超时当这个消费者中止了,将会重新分配消息时。这是因为只是调度消息时,消息进入队列。 showImg(https://segmentfault.com/img/bVXNuN?w=332&h=111); 介绍 在上一个 Hello World 教程中,我们编写了从指定队列发送...

    iKcamp 评论0 收藏0
  • 千万级消息设计--初级篇(

    摘要:需求用户个人消息,平台消息平台给所有人发送消息。原因如果平台用户量较大时,假如万,发一条系统消息,将要给万的人发送一条,就是的消息记录。千万级的数据表,后期通过索引优化,结构优化,业务逻辑优化,避免大量并发查询。 说明 本文都是参加工作的实际情况,希望对大家有所帮助。—— 蚂蚁爬树不怕高,有心学习不怕老。 需求 1.用户个人消息,平台消息(平台给所有人发送消息)。2.用户未读消息展示,...

    youkede 评论0 收藏0
  • 千万级消息设计--初级篇(

    摘要:需求用户个人消息,平台消息平台给所有人发送消息。原因如果平台用户量较大时,假如万,发一条系统消息,将要给万的人发送一条,就是的消息记录。千万级的数据表,后期通过索引优化,结构优化,业务逻辑优化,避免大量并发查询。 说明 本文都是参加工作的实际情况,希望对大家有所帮助。—— 蚂蚁爬树不怕高,有心学习不怕老。 需求 1.用户个人消息,平台消息(平台给所有人发送消息)。2.用户未读消息展示,...

    0x584a 评论0 收藏0

发表评论

0条评论

XFLY

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<