1、在大型项目中,一般都会用到消息服务(JMS)。JMS只是一个规范,它是消息传送客户端和消息传送系统通信时所需接口和类的一个抽象。就像JDBC抽象访问关系型数据库,JNDI抽象访问命名和目录服务一样。至于MQ,则是JMS的一种具体实现。消息服务具有的优点,这里简单介绍一下。
①异构集成
②缓解系统瓶颈
③提高可伸缩性
④提高效率
⑤有助于体系结构的灵活性和敏捷性
作为开发人员而言,以上的几点只用简单的了解一下即可。
2、JMS主要支持两种消息传送方式:点对点模型(P2P),发布/订阅模型(Pub/Sub)。
在点对点模型中,发送者发送的消息,只能被一个接收者所接收,即使接收者有多个。采用轮询或者拉取的方式,从队列中请求消息。
在发布/订阅模型中,发布者发送的消息,能够被多个订阅者锁接收。主题采用推送的方式,将消息推送到订阅者。
3、相关的主要接口
名称 | 连接工厂 | 目的地 | 连接 | 会话 | 消息 | 消息生产者 | 消息消费者 |
公共接口 | ConnectionFactory | Destionation | Connection | Session | Message | MessageProducer | MessageConsumer |
点对点模型 | QueueConnectionFactory | Queue | QueueConnection | QueueSesssion | Message | QueueSender | QueueReceiver |
发布/订阅模型 | TopicConnectionFactory | Topic | TopicConnection | TopicSession | Message | TopicPublisher | TopicSubscriber |
4、Message,消息。一条消息包括,消息头,属性和有效负载。消息类型之间的区别取决于他们的有效负载,也就是该消息包含的 应用程序数据类型。下面接单的介绍一个各 种消息:
①Message,不含有效负载。
②TextMessage,携带了一个java.lang.String作为有效负载。可用于简单的文本消息交换,也可用于更复杂的字符数据交换,比如XML文档等。
③ObjectMessage,携带了一个可序列化Java对象作为有效负载。
④BytesMessage,携带了一组原始类型字节流作为有效负载。
⑤StreamMessage,携带了一个Java原始数据类型流(int,double,char等)作为有效负载。
⑥MapMessage,携带了一组键值对作为有效负载,类似于java.util.Properties对象。