JMS Java消息服务,JMS的client可以通过它进行异步通信,什么是异步,简单的说就是client对server发出了一个request,不用一直等待,可以继续后面的工作,server会自动帮你搞定。JMS有两种消息模型:P2P和Pub/Sub,翻译成中文就是 点对点和发布/订阅。
P2P
有3个部分,消息队列(Queue),发送者(Sender),接收者(Receiver)其中接收者也可以称为消费者(Consumer);过程大致这样,发送者发消息到一个特定的消息队列,队列暂时保存着消息,然后等待消费者来消费或者超时;
1每个消息只有一个Consumer(一旦被消费,就从队列中移除)
2发送者和消费者在时间上没有依赖性
3消费者在成功收到消息后要对消息队列表示应答成功
1,3就不用解释了;2的话什么叫时间上没有依赖性了?就是发送者发完后,不用理会当前是否有Consumer在运行,这都不会影响消息正常发送到队列。
可以联想一下QQ聊天
Pub/Sub
也是3个部分,主题(Topic),发布者(Publisher),订阅者(Subscriber).一般过程是多个发布者将消息发布到主题,多个订阅者订阅这些主题
1每个消息可以有多个Subsciber
2发布者和消息者有时间上的依赖性(如果当前主题中有消息,而某个Subscriber没有运行,当消息超时以后,即使这个Subscriber再运行也消费不到这条消息了)
当然,为了克服这个严格限制,JMS有一种可持久化的订阅
在JMS中,消息的产生和消费是异步的,但对于消费者来说它有同步和异步两种方式
同步-订阅者或者接收者调用receive方法来接收消息,此方法在接收到消息之前将一直阻塞直到超时。
异步-订阅者或者接收者注册为一个消息接听器,当消息到达后,系统会自动的调用监听器的onMessage方法。
P2P
有3个部分,消息队列(Queue),发送者(Sender),接收者(Receiver)其中接收者也可以称为消费者(Consumer);过程大致这样,发送者发消息到一个特定的消息队列,队列暂时保存着消息,然后等待消费者来消费或者超时;
1每个消息只有一个Consumer(一旦被消费,就从队列中移除)
2发送者和消费者在时间上没有依赖性
3消费者在成功收到消息后要对消息队列表示应答成功
1,3就不用解释了;2的话什么叫时间上没有依赖性了?就是发送者发完后,不用理会当前是否有Consumer在运行,这都不会影响消息正常发送到队列。
可以联想一下QQ聊天
Pub/Sub
也是3个部分,主题(Topic),发布者(Publisher),订阅者(Subscriber).一般过程是多个发布者将消息发布到主题,多个订阅者订阅这些主题
1每个消息可以有多个Subsciber
2发布者和消息者有时间上的依赖性(如果当前主题中有消息,而某个Subscriber没有运行,当消息超时以后,即使这个Subscriber再运行也消费不到这条消息了)
当然,为了克服这个严格限制,JMS有一种可持久化的订阅
在JMS中,消息的产生和消费是异步的,但对于消费者来说它有同步和异步两种方式
同步-订阅者或者接收者调用receive方法来接收消息,此方法在接收到消息之前将一直阻塞直到超时。
异步-订阅者或者接收者注册为一个消息接听器,当消息到达后,系统会自动的调用监听器的onMessage方法。