JMS 是 java 消息传递“API”,我仍然不清楚 HornetQ 等第三方 API 到底做了什么?没有任何默认/参考实现吗?
2 回答
JMS 只是一个规范,你可以选择任何你喜欢的实现:
- 大黄蜂Q
- 活动MQ
- 红帽 MRG
- IBM MQ
- Oracle MQ ...等等等等...等等
除了规范之外,每一个都将提供不同的功能。
例如,HornetQ 提供确认确认(因此您不需要阻塞等待确认的发送,并且可以使用高级技术进行异步操作,如异步 servlet)。
HornetQ 还提供大消息。
HornetQ 还提供了一个核心 API,您可以在没有 JMS 的情况下使用。
例如,我知道如果您不想使用 JMS,也可以使用 IBM 的 API。
因此,总结 Java 消息服务 - JMS 只是一组 Java 接口,您必须选择正确的实现。
我认为您正在混合一些概念。正如您所说,JMS 是一个 API(或者,如果您愿意,也可以是一个规范)。简化的 JMS 定义了一组接口,这些接口必须由某些供应商实现。在您的情况下,您使用的是 JBoss HornetQ。但是,还有其他实现方式,例如 Apache ActiveMQ 等。因此,如果您愿意或您的要求发生变化,您可以交换实施。
实现 JMS API 的 Provider 可能包含其他功能。但这些是专有的,不在 JMS 规范中。因此,可能复制包含在一个提供程序中,而另一个提供程序不提供这种功能。
Another example can be found in JDBC. JDBC itself is the API, but there exist different implementation for different databases. Same to JPA, where Hibernate and Toplink are prominent examples.