ActiveMQ背景及概念(一)

本文介绍了Java消息服务(JMS)的基本概念及其如何解决分布式系统中常见的问题,包括同步通信、客户和服务对象生命周期耦合及点对点通信局限性。文中详细阐述了JMS中的关键组件如生产者、消费者、消息模型等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景&JMS描述    

   当前,CORBA,DCOM,RMI等RPC中间尖技术已广泛应用于各个领域。但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:

        (1)同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行;

        (2)客户和服务对象的生命周期紧密耦合:客户进程和服务对象进程都必须正常运行;如果由于服务对象崩溃或者网络故障导致客户的请求不可达,客户会收到异常。

         (3)点对点通信:客户的一次调用只发送给某个单独的目标对象。

    面对消息的中间件较好地解决以上问题(MOM)。发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将信息转发给接收者。这种模式下,发送和接收是异步的,发送者无需等待;二者的生命周期未必相同;发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行;一对多通信:对于一个消息可以有多个接收者。

    Java消息服务(JMS)定义了Java中访问消息中间件的接口。JMS只是接口,并没有给予实现,实现JMS接口的消息中间件称为JMS Provider,已有的MOM系统包括Apache和ActiceMQ,以及阿里巴巴的RocketMQ,IBM的MQseries,Microsoft的MSMQ和BEA的MessageQ,RabbitMQ等..他们基本都是遵循JMS规范。

JMS术语 


    JMS实现JMS接口的消息中间件

    Provider(MessageProvider) 生产者

    Consumer(MessageConsumer) 消费者

    PTP:Point to Point 点对点的消息模型

    Pub/Sub:Publish/Subscribe 发布/订阅的消息模型

    Queue 队列目标

    Topic 主题目标

    ConnectionFactory 连接工厂,JMS用它创建链接

    Connection JMS客户端连接到JMS Provider的连接

    Destination 消息的目的地

    Session 会话,一个发送或者接收消息的线程

                                                                                JMS术语概念(一)

 

 ConnectionFactory接口(连接工厂)

    用户用来创建到JMS提供者的链接的被管对象。JMS客户通过可移植的接口访问链接,会这样的当下层的实现改变时,代码不需要进行修改。管理员在JNDI名字空间中配置连接工厂,这样,JMS客户才能够查找到它们。根据消息类型的不同,用户将使用队列连接工厂,或者主题连接工厂。

Connection接口(链接)

    

    连接代表了应用程序和消息服务器之间的通信链路。在获得了连接工厂后,就可以创建一个与JMS提供者的链接。根据不同的链接类型,连接允许用户创建回话,以发送和接收队列和主题到目标。

  Desination接口(目标)

    目标是一个包装了消息目标标识符的被管对象,消息目标是指消息发布和接收的地点,或者是队列,或者是主题。JMS管理员创建这些对象,然后用户通过JNDI发现它们。和连接工厂一样,管理员可以创建两种类型的目标,点对点模型的队列,以及发布者/订阅者模型的主题。

                                                                                             JMS术语概念(二)

MessageConsumer接口(消息消费者)

    由会话创建的对象,由于接收发送到目标的消息。消费者可以同步地(阻塞模式),或异步(非阻塞)接收队列和主题类型的消息。

MessageProducer接口(消息生产者)

    由会话创建的对象,用于发送消息到目标。用户可以创建某个目标的发送者,也可以创建一个通用的发送者,再发送消息时制定目标。

Message接口(消息

    是在消费者和生产者之间传送的对象,也就是说从一个应用程序送到另一个应用程序。一个消息有三个主要部分:

        消息头(必须) 包含与用于识别和为消息寻找路由的操作设置。

        一组消息属性(可选) 包含额外的属性,支持其他提供者和用户的兼容。可以创建定制的字段和过滤器(消息选择器)。

        一个消息体(可选) 允许用户篡改建五种类型的消息(文本信息,映射消息,字节消息,流消息和对象信息)。

    消息接口非常灵活,并提供了许多方式来定制消息的内容。

                                                                                        JMS术语概念(三)

Session接口(会话)

    表示一个单线程的上下文,用于发送和接收消息。由于会话是单线程的,所以消息是连续的,就是或消息是按照发送的顺序一个一个接收的。会话的好处是它支持事务。如果用户选择了事务支持,会话上下文将保存一组消息,直到事务被提交才发送这些消息。在提交事务之前,用户可以使用回滚操作取消这些消息。一个绘画允许用户创建消息生产者来发送消息,创建消息消费者来接收消息。

消息格式定义

        JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。

            Stringessage Java原始数据的数据流

            MapMessage 一套名称-值对

            TextMessage 一个字符串对象

            ObjectMessage 一个序列化的Java对象

            ByteMessage 一个未解释字节的数据流




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值