JMS学习整理

面向消息的中间件

随着系统变大变复杂,一个大的系统,开始向着领域模型和微服务架构演进。而各个子系统之间的通信开始变得复杂、重要。不过总的来说还是分两类:同步通信和异步通信。
对于同步通信,现在通俗的做法有REST、RPC、SOAP等。对于异步,现在用的最多就是面向消息的中间件(Message Oriented Middleware,MOM)。
我们知道异步通信一般有两个问题,一是发送方进程与消息服务端进程要都正常运行,二是只能点对点通信。MOM就很好的解决了这两个问题。
首先,发送方将消息发送给消息服务器,消息服务器将消息存放在若干队列中,当消息接收方接收消息时,再将消息转发给接收方。这种情况下,消息的发送和接收都是异步的,发送方无需等待即可发送,接收方接收消息的时候发送方可以不运行,即两方的运行状况不受彼此影响。另外,可以一对多通信,一个消息可以有多个接收者。

JMS概述

JMS全称Java消息服务(Java Message Service)。 官方文档给的解释是:Java消息服务(JMS) API是一个消息传递标准,允许基于Java平台Enterprise Edition (Java EE)的应用程序组件创建、发送、接收和读取消息。它支持松散耦合、可靠和异步的分布式通信。

说白了,JMS就是定义一套规范,构建一个生产者-消费者的消息队列模型,只是没有实现。所以有Java消息服务是一个与具体平台无关的API的说法。目前绝大多数MOM提供商都对JMS提供了支持,实现JMS 接口的消息中间件称为JMS Provider,比如ActiveMQ、Tibco EMS。我用的是后者。

JMS功能

JMS规范包含点对点(Point to Point,PTP)和发布/订阅(Publish/Subscribe,pub/sub)两种消息模型,提供可靠消息传输、事务和消息过滤等机制。

JMS术语        

JMS Provider:实现JMS 接口的消息中间件;
PTP:Point to Point,即点对点的消息模型;      
Pub/Sub:Publish/Subscribe,即发布/订阅的消息模型;
Queue:队列目标;
Topic:主题目标;
ConnectionFactory:连接工厂,JMS 用它创建连接;
Connection:JMS 客户端到JMS Provider 的连接;
Destination:消息的目的地;
Session:会话,一个发送或接收消息的线程;
MessageProducer:由Session 对象创建的用来发送消息的对象;
MessageConsumer:由Session 对象创建的用来接收消息的对象;
Acknowledge:签收,可靠传输的保证。

Transaction:事务。


JMS的收发

看了这么多JMS概念,先简单看下JMS的收发message的步骤。下面两张图,一张是Producer 向EMS发送message,另一个张是Consumer从EMS接收message的步骤。

发送消息:


接收消息:


这里要说一下,Session 是一个继承 Runnable 的接口。也就是说,Connection 通过创建新的线程来跟中间件进行交互。源码如下:

public interface Session extends Runnable {
    int AUTO_ACKNOWLEDGE = 1;
    int CLIENT_ACKNOWLEDGE = 2;
    int DUPS_OK_ACKNOWLEDGE = 3;
    int SESSION_TRANSACTED = 0;

    // 其他代码

    void run();

    // 其他代码
}


JMS消息模型

说完JMS 编程步骤,说下JMS的消息模型。
JMS 支持两种截然不同的消息传送模型:PTP(即点对点模型)和Pub/Sub(即发布/订阅模型),分别称作:PTP Domain 和Pub/Sub Domain。

PTP(使用Queue即队列目标)     
1.消息从一个生产者传送至一个消费者。
2.生产者将消息发送至目标队列,然后根据队列传送策略,从该队列将消息传送至与该队列连接的一个
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值