应用开发中,我们可以通过消息中间件来提升系统异步通信能力,扩展解耦能力 消息服务重要概念: 消息代理,目的地 当消息发送者发送消息以后,会有消息代理接管,消息代理要保证消息 能传递到指定目的地,消息队列有两种形式的目的地,队列(Queue)和主题(Topic) 队列是点对点消息通信,主题是发布订阅消息通信
应用开发中,我们可以通过消息中间件来提升系统异步通信能力,扩展解耦能力
消息服务重要概念:
消息代理,目的地
当消息发送者发送消息以后,会有消息代理接管,消息代理要保证消息
能传递到指定目的地,消息队列有两种形式的目的地,队列(Queue)和主题(Topic)
队列是点对点消息通信,主题是发布订阅消息通信
点对点:消息发送者发送消息,消息代理将其放入一个队列,消息接收者从中获取消息内容 消息被读取后移除队列,消息只有唯一的发送者和接收者(点对点) 但是不一定是只有一个接收者 发布订阅式:发送者发送消息到主题,多个接收者(订阅者)监听(订阅)这个主题 那么就会在消息到达的同时收到消息 JMS,java消息服务,基于JVM消息规范,ActiveMQ,HornetMQ是JMS实现的 他们的好处就是JAVA有原生的调用,坏处是跨语言平台就不行了 AMQP高级消息队列协议,兼容JMS,rabbitMQ是AMQP的实现
点对点:消息发送者发送消息,消息代理将其放入一个队列,消息接收者从中获取消息内容
消息被读取后移除队列,消息只有唯一的发送者和接收者(点对点)
但是不一定是只有一个接收者
发布订阅式:发送者发送消息到主题,多个接收者(订阅者)监听(订阅)这个主题
那么就会在消息到达的同时收到消息
JMS,java消息服务,基于JVM消息规范,ActiveMQ,HornetMQ是JMS实现的
他们的好处就是JAVA有原生的调用,坏处是跨语言平台就不行了
AMQP高级消息队列协议,兼容JMS,rabbitMQ是AMQP的实现
JMS因为是使用的javaAPI,可以直接像JDBC调用那样直接使用 更换JMS不需要修改代码,不关心底层实现,但是它对跨语言平台支持性差 (JMS定义了JAVA的API层面的标准) AMQP则是通过网络线级协议,AMQP消息类型只支持Byte[] 众所周知,网络交互,万物皆是Byte (AMQP定义了wire-level层的协议标准,天然跨平台)
JMS因为是使用的javaAPI,可以直接像JDBC调用那样直接使用
更换JMS不需要修改代码,不关心底层实现,但是它对跨语言平台支持性差
(JMS定义了JAVA的API层面的标准)
AMQP则是通过网络线级协议,AMQP消息类型只支持Byte[]
众所周知,网络交互,万物皆是Byte
(AMQP定义了wire-level层的协议标准,天然跨平台)