使用 JMS 的优点:
在系统集成中,我们可以使用 RMI,Webservice 等技术进行远程调用,但是他们都要求客
户端程序处理完成后在返回给调用系统,这样就增加了调用系统的等待时间,对于一些不
需要同步操作的系统会造成大的系统开销,如果使用 jms,可以采用异步调用,把消息放
到 jms provider 中即可,客户端不用等待回复.
OO系统只负责把消息发送到服务端即可,不用管是否能被消费,这样减低了生产系统和消
费系统的偶合.比如可以把发邮件的功能从系统中独立出来,专门做个系统发送邮件,邮件来
源从 jms 服务器中取,这样就可以让多个系统共享发邮件的功能,不用重复开发.
JMS 的一些基本概念:
1.PTP(点对点):
• 每个消息只能有一个消费者。
• 消息的生产者和消费者之间没有时间上的相关性。无论消费者在生产者发送消息的时候
是否处于运行状态,它都可以提取消息。
Pub/Sub(发布/订阅):
• 每个消息可以有多个消费者。
• 生产者和消费者之间有时间上的相关性。订阅一个主题的消费者只能消费自它订阅之后
发布的消息。持久订阅允许消费者消费它在未处于激活状态时发送的消息。
在点对点消息传递域中,目的地被成为队列(queue);在发布 /订阅消息传递域中,目的
地被成为主题(topic)。
.2。Session(会话):
Session.AUTO_ACKNOWLEDGE(常用):O会话自动确认OO 当消费者接收到消息,且执
行完成(在没有异常的情况下) 系统会自动确认该客户端消费了该消息
Session.CLIENT_ACKNOWLEDGE : 客 户 端 确 认 OOO 客 户 端 通 过 调 用 消 息 的
acknowledge 方法手动确认成功接收一条消息O
Session.DUPS_OK_ACKNOWLEDGE:会话延迟消息的确认
3.消息持久化
在发送消息时,我们可以指定该消息是否持久化,默认持久化
producer.setDeliveryMode (DeliveryMode.PERSISTENT);
持久化就是当 jms provider 停止服务后,系统会把还没有发送的消息持久化到本地硬盘,当
服务重启后,会重新加在消息到队列中,非持久化则反之, 相比较而言,持久化比较消耗性能,但
是他能更好的保证消息被发送到客户端。
4.消息优先级
producer.setPriority (8);
消息的优先级从 0(最低)到 9(最高)有 10 种级别. 默认优先级为 4,jms provider 会确