多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### JMS JMS(Java Message Service即JAVA消息服务)是一组Java应用程序接口,提供消息的创建、发送、接收、读取等服务; JMS定义了一组公共应用程序接口和相应的语法,类似于JAVA数据库的统一访问接口JDBC,它是一种与厂商无关的API,使JAVA程序能与不同厂商的消息组件很好的通信; ### JMS优势 异步:JMS天生就是异步的,客户端获取消息的时候,不需要主动发送请求,消息会自动发送给可用的客户端 可靠:JMS保证消息只会递送一次。大家都遇到过重复创建消息问题,而JMS能帮你避免该问题,只是避免而不是杜绝,所以在一些糟糕的环境下还是有可能会出现重复 ### JMS消息传递模型 * 点对点(PTP) * 发布/订阅(publish/subscribe) ### 点对点消息传送模型(P2P) 在点对点消息传送模型中,应用程序由消息队列,发送者,接收者组成。每一个消息发送给一个特殊的消息队列,该队列保存了所有发送给它的消息(除了被接收者消费掉的和过期的消息) 点对点消息模型有如下特性: * 每个消息只有一个接受者; * 消息发送者和消息接受者并没有时间依赖性; * 当消息发送者发送消息的时候,无论接收者程序在不在运行,都能获取到消息; * 当接收者收到消息的时候,会发送确认收到通知(acknowledgement); 点对点消息模型图: ![](https://img.kancloud.cn/47/9f/479fe075616ef3112c9d31e355dd0704_575x135.png) ### 发布/订阅消息传送模型 在发布/订阅消息模型中,发布者发布一个消息,该消息通过topic传递给所有的客户端。在这种模型中,发布者和订阅者彼此不知道对方,是匿名的且可以动态发布和订阅topic。topic主要用于保存和传递消息,且会一直保存消息直到消息被传递给客户端 发布/订阅消息模型有如下特性: * 一个消息可以传递给多个订阅者; * 发布者和订阅者有时间依赖性,只有当客户端创建订阅后才能接受消息,且订阅者需一直保持活动状态以接收消息; * 为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息; 发布/订阅消息模型图: ![](https://img.kancloud.cn/5a/97/5a9794414d865c2063f14ae1326501c5_402x164.png) ### JMS模块 * 管理对象(Administered objects)-连接工厂(Connection Factories)和目的地(Destination) * 连接对象(Connections) * 会话(Sessions) * 消息生产者(Message Producers) * 消息消费者(Message Consumers) * 消息监听者(Message Listeners) ### JMS消息结构 * 消息头 * 消息属性 * 消息体 ### JMS消息类型 * TextMessage * MapMessage * BytesMessage * StreamMessage * ObjectMessage ### JMS消息接收方式 * 同步方式:使用同步方式接收消息的话,消息订阅者调用receive()方法。在receive()中,消息未到达或在到达指定时间之前,方法会阻塞,直到消息可用 * 异步方式:使用异步方式接收消息的话,消息订阅者需注册一个消息监听者,类似于事件监听器,只要消息到达,JMS服务提供者会通过调用监听器的onMessage()递送消息