zoukankan      html  css  js  c++  java
  • 消息服务-JMS

    消息服务
    消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建、发送、读取消息等,用于支持应用程序开发。在Java中,当两个应用程序使用JMS进行通信时,它们之间并不是直接相连的,而是通过一个共同的消息收发服务连接起来,可以达到解耦的效果。

    JMS
    JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM-分布式系统的集成)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
    JMS是一种与厂商无关的 API,用来访问消息收发系统消息,它类似于JDBC(Java Database Connectivity)。

    体系架构

    JMS提供者:连接面向消息中间件的,JMS接口的一个实现。提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器。

    JMS客户:生产或消费基于消息的Java的应用程序或对象。

    JMS生产者:创建并发送消息的JMS客户。

    JMS消费者:接收消息的JMS客户。

    JMS消息:包括可以在JMS客户之间传递的数据的对象。

    JMS队列:一个容纳那些被发送的等待阅读的消息的区域。与队列名字所暗示的意思不同,消息的接受顺序并不一定要与消息的发送顺序相同。一旦一个消息被阅读,该消息将被从队列中移走。

    JMS主题:一种支持发送消息给多个订阅者的机制。

    JMS对象模型


    ConnectionFactory 连接工厂
    Connection 封装客户端与JMS provider之间的一个虚拟的连接
    Session 生产和消费消息的一个单线程上下文; 用于创建producer、consumer、message、queue..
    Destination 消息发送或者消息接收的目的地
    MessageProducer/consumer 消息生产者/消费者

    JMS消息模型
    在JMS标准中,有两种消息模型PTP(Point to Point),Publish/Subscribe(Pub/Sub)。
    PTP:
    1. 如果session关闭时,有一些消息已经收到,但还没有被签收,那么当消费者下次连接到相同的队列时,消息还会被签收
    2. 如果用户在receive方法中设定了消息选择条件,那么不符合条件的消息会留在队列中不会被接收
    3. 队列可以长久保存消息直到消息被消费者签收。消费者不需要担心因为消息丢失而时刻与jms provider保持连接状态
    Pub/sub:
    1. 订阅可以分为非持久订阅和持久订阅
    2. 当所有的消息必须接收的时候,则需要用到持久订阅。反之,则用非持久订阅

    接收消息
    同步:使用同步方式接收消息的话,消息订阅者调用receive()方法。在receive()中,消息未到达或在到达指定时间之前,方法会阻塞,直到消息可用。
    异步:使用异步方式接收消息的话,消息订阅者需注册一个消息监听者,类似于事件监听器,只要消息到达,JMS服务提供者会通过调用监听器的onMessage()递送消息

    JMS消息结构(Message)
    Message主要由三部分组成,分别是Header,Properties,Body, 详细如下:

    Header消息头,所有类型的这部分格式都是一样的

    Properties属性,按类型可以分为应用设置的属性,标准属性和消息中间件定义的属性

    Body消息正文,指我们具体需要消息传输的内容。

  • 相关阅读:
    RPC 调用简述
    bootstrap tab切换无效的一种情况
    html块元素和内联元素介绍
    重装系统后,Linux虚拟机无法联网
    datatables.js表头挤在一列的解决办法
           ‌‍ 6种空白空格的区别
    pagination.js通过ajax请求获取数据
    谷歌浏览器调制,控制面板各命令总结
    点击表格弹窗获取另外一套数据之后,原表格相关数据的调用
    datatable columns与columnDefs
  • 原文地址:https://www.cnblogs.com/snow1314/p/12499616.html
Copyright © 2011-2022 走看看