谁能给个例子,或者比喻,原来一直就只会用 rabbitmq 和 rocketmq 这个轮子,结果系统里面别人用的封装的 mq ,看源码有点晕
1
HentaiMew 2015-11-21 22:50:07 +08:00 1
JMS 在 Java 里面跟 JPA 是同一个级别的概念,是一种与实现无关的规范。
完全遵循 JMS 标准的的 MQ 产品,是可以在几乎不动项目代码的基础上更换 MQ 的。 RabbitMQ 就不属于标准 JMS 实现。但是 MQ 的核心思想都是一样的。用例如 Spring 提供的 JMS API 时,更加能做到与具体 JMS 产品无关。 |
6
wucao219101 2015-11-22 10:58:13 +08:00 1
举个栗子:最近我家里的淋浴的喷头坏掉了,我在想,是不是要换一个同样牌子的喷头才能接的上(但附近不一定能买到同样牌子的),或者要把一整套全换掉(感觉要花很多钱)。到了五金店我才发现多虑了,原来所有的喷头的接口都一样,也就是有一套统一的标准。
JMS 同样是制定的一套标准(代号 JSR 914 ),一系列 Interface 。消息队列的开发者可以根据这个标准来实现,这样一来,跟其他系统的集成,或者切换使用其他的消息队列,就非常方便。 Java 还有很多其他的标准,如 JAX-RS ( RESTful WebService 标准,代号 JSR 311 )、 JAX-WS 、 JDBC 、 JPA 。。。 其实都是类似于 Java 的接口和实现类, List list = new ArrayList(); 如果哪天觉得 ArrayList 性能不好,换成 LinkedList ,不用改变其他代码,多好~ |
7
broadliyn 2015-11-22 12:52:52 +08:00 1
activemq/rabbitmq 是 AMPQ 的具体实现——你可以理解成 nginx 、 apache 、 lighthttpd 、 tomcat 等服务器是 http 协议的具体实现
jms 是 java 消息队列的标准——你可以理解成 Servlet Api 是 java web 开发里与 http 请求、响应交互的标准接口 |