JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
ActiveMQ 开发包下载及运行环境搭建
主页:http://activemq.apache.org/
目前最新版本:5.11.1 开发包及源码下载地址:http://activemq.apache.org/activemq-5111-release.html
ActiveMQ 服务启动地址:http://127.0.0.1:8161/admin/ 用户名/密码 admin/admin
ActiveMQ方式:
1.直接 Receive 方式
Session.AUTO_ACKNOWLEDGE。当客户成功的从receive方法返回的时候,或者从MessageListener.onMessage 方法成功返回的时候,会话自动确认客户收到的消息。
Session.CLIENT_ACKNOWLEDGE。 客户通过消息的 acknowledge 方法确认消息。需要注意的是,在这种模 式中,确认是在会话层上进行:确认一个被消费的消息将自动确认所有已被会话消 费的消息。例如,如果一 个消息消费者消费了 10 个消息,然后确认第 5 个消息,那么所有 10 个消息都被确认。
Session.DUPS_ACKNOWLEDGE。 该选择只是会话迟钝第确认消息的提交。如果 JMS provider 失败,那么可 能会导致一些重复的消息。如果是重复的消息,那么 JMS provider 必须把消息头的 JMSRedelivered 字段设置 为 true。
2.使用 Listener 监听方式
-
基本概念
JMS是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。
-
消息模型
○ Point-to-Point(P2P) ○ Publish/Subscribe(Pub/Sub)
即点对点和发布订阅模型
-
P2P
- P2P模式图
- 涉及到的概念
- 消息队列(Queue)
- 发送者(Sender)
- 接收者(Receiver)
- 每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时。
-
P2P的特点
- 每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)
- 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列
- 接收者在成功接收消息之后需向队列应答成功
如果你希望发送的每个消息都应该被成功处理的话,那么你需要P2P模式。
- P2P模式图
-
Pub/Sub
- Pub/Sub模式图
- 涉及到的概念
- 主题(Topic)
- 发布者(Publisher)
- 订阅者(Subscriber)
客户端将消息发送到主题。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。
-
Pub/Sub的特点
- 每个消息可以有多个消费者
- 发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。
- 为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。
如果你希望发送的消息可以不被做任何处理、或者被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型
- Pub/Sub模式图
-
消息的消费
在JMS中,消息的产生和消息是异步的。对于消费来说,JMS的消息者可以通过两种方式来消费消息。
○ 同步
订阅者或接收者调用receive方法来接收消息,receive方法在能够接收到消息之前(或超时之前)将一直阻塞
○ 异步
订阅者或接收者可以注册为一个消息监听器。当消息到达之后,系统自动调用监听器的onMessage方法。 -
JMS编程模型
(1) ConnectionFactory
创建Connection对象的工厂,针对两种不同的jms消息模型,分别有QueueConnectionFactory和TopicConnectionFactory两种。可以通过JNDI来查找ConnectionFactory对象。
(2) Destination
Destination的意思是消息生产者的消息发送目标或者说消息消费者的消息来源。对于消息生产者来说,它的Destination是某个队列(Queue)或某个主题(Topic);对于消息消费者来说,它的Destination也是某个队列或主题(即消息来源)。
所以,Destination实际上就是两种类型的对象:Queue、Topic可以通过JNDI来查找Destination。
(3) Connection
Connection表示在客户端和JMS系统之间建立的链接(对TCP/IP socket的包装)。Connection可以产生一个或多个Session。跟ConnectionFactory一样,Connection也有两种类型:QueueConnection和TopicConnection。
(4) Session
Session是我们操作消息的接口。可以通过session创建生产者、消费者、消息等。Session提供了事务的功能。当我们需要使用session发送/接收多个消息时,可以将这些发送/接收动作放到一个事务中。同样,也分QueueSession和TopicSession。
(5) 消息的生产者
消息生产者由Session创建,并用于将消息发送到Destination。同样,消息生产者分两种类型:QueueSender和TopicPublisher。可以调用消息生产者的方法(send或publish方法)发送消息。
(6) 消息消费者
消息消费者由Session创建,用于接收被发送到Destination的消息。两种类型:QueueReceiver和TopicSubscriber。可分别通过session的createReceiver(Queue)或createSubscriber(Topic)来创建。当然,也可以session的creatDurableSubscriber方法来创建持久化的订阅者。
(7) MessageListener
消息监听器。如果注册了消息监听器,一旦消息到达,将自动调用监听器的onMessage方法。EJB中的MDB(Message-Driven Bean)就是一种MessageListener。
-
企业消息系统的好处
我们先来看看下图,应用程序A将Message发送到服务器上,然后应用程序B从服务器中接收A发来的消息,通过这个图我们一起来分析一下JMS的好处:
- 提供消息灵活性
- 松散耦合
- 异步性
相关推荐
Java消息服务(JMS,Java Message Service)是Java平台中用于企业级应用间进行异步消息传递的标准API。它提供了一种可靠的消息传输机制,使得应用程序可以在不直接互相了解的情况下交换信息。ActiveMQ是Apache软件...
Java中间件领域的ActiveMQ是一款由Apache开发的开源消息中间件,它为企业级应用提供高效、可扩展、稳定且安全的消息通信服务。ActiveMQ的核心目标是实现标准的、面向消息的集成,支持多语言环境,确保不同平台之间的...
安装 下载完成后,我们直接解压即可,解压后的目录如下: 进入相对应的目录双击a c t i v e M q.bat启动我们的服务端即可。 E:\tools\M q\Activit eM q\apache-a c t i v e M q-5.16.0-bin\apache-a c t i v e M q-...
### Java消息中间件教程——ActiveMQ #### 一、课程安排与消息中间件的重要性 - **1-1 课程安排**:本课程旨在系统性地介绍ActiveMQ的各个方面,包括安装、使用、集群搭建等内容。 - **1-2 为什么使用消息中间件**...
消息队列:ActiveMQ:ActiveMQ与Java消息服务(JMS)API教程.docx
ActiveMQ,作为Java消息服务(JMS)的一个实现,是Apache软件基金会开发的一款开源消息中间件。它在分布式系统中扮演着重要的角色,允许不同组件或服务之间进行异步通信,提高了系统的可扩展性和解耦性。在Java编程...
- **高可用性**:通过集群和复制策略,ActiveMQ可以提供高可用的服务,即使在部分节点故障时,也能保证消息的传递。 - **持久化**:ActiveMQ支持消息持久化,即使服务器重启,也不会丢失未消费的消息。 - **负载均衡...
ActiveMQ是一款非常流行的开源消息队列中间件,它实现了JMS(Java Message Service,Java消息服务)1.1规范,面向消息的中间件(Message Oriented Middleware,MOM)是指利用高效可靠的消息传递机制进行与平台无关的...
ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它遵循开放消息中间件协议(Open Message Broker Protocol,简称AMQP)并支持多种消息协议,如JMS(Java Message Service)、STOMP(Simple Text Oriented ...
标题中的“在Java与C++间应用Activemq”指的是使用Apache ActiveMQ这一开源消息代理在Java和C++编程语言之间构建通信桥梁。ActiveMQ是Java Message Service (JMS) 的实现,允许分布式系统中的组件通过消息传递进行...
Java消息中间件ActiveMQ是Apache软件基金会开发的一款开源消息队列系统,广泛应用于分布式系统中的异步处理和解耦。ActiveMQ提供了多种协议支持,包括开放标准的JMS(Java Message Service)和AMQP(Advanced ...
根据提供的标题、描述和标签,我们可以推断出这是一本关于Java消息服务的专业书籍——《Java消息服务(第二版)清晰中文完整版》。虽然在给出的部分内容中并没有实际的知识点,但从书名和标签来看,我们可以围绕Java...
ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它遵循JMS(Java消息服务)规范,用于在分布式系统中提供高效、可靠的消息传递。在这个Java项目中,包含了使用Java操作ActiveMQ的代码示例和所需的jar包,可以...
Java消息中间件JMS,ActiveMQ
java springboot整合activemq工程 #activemq配置 #默认情况下activemq提供的是queue模式 true是可以使用topic,false是仅使用queue模式 spring.jms.pub-sub-domain: true # 设置连接的activemq服务器 spring....
ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它遵循开放消息传递标准(JMS,Java Message Service),用于在分布式系统中实现可靠的消息传递。在本文中,我们将深入探讨ActiveMQ v6.0.1的核心特性、应用...
1. **Broker服务**:这是ActiveMQ的核心,负责接收、存储和转发消息。源码中可以看到如何实现消息的路由策略,如虚拟主题(Virtual Topics)、网络传输(Network of Brokers)以及持久化机制(如KahaDB或JDBC)。 2...
这篇"ActiveMQ学习笔记之九--发送消息到队列中"主要探讨的是如何通过编程方式向ActiveMQ队列发送消息,这对于理解和应用消息中间件至关重要。 首先,我们要理解ActiveMQ中的队列(Queue)概念。队列是一种先进先出...
接下来是ActiveMQ,它是Apache软件基金会的一个开源项目,是基于Java Message Service(JMS)规范的消息中间件。ActiveMQ可以存储和转发各种消息类型,包括文本、对象、文件以及流数据。在SpringBoot中集成ActiveMQ...
java中使用消息中间件ActiveMQ的MQTT协议发布消息使用fusesource,fusesource提供三种方式实现发布消息的方式,分别是阻塞式(BlockingConnection)、回调式(CallbackConnection)和Future样式(FutureConnection)