ActivationSpec 和 ConnectionFactory 之间有什么区别?

2022-09-02 09:59:11

我的理解是:

  • MDBs(消息驱动的 Bean)通过激活规范进行连接。
  • MDPs(消息驱动的 POJO)通过连接工厂进行连接。

IBM 的这张图表很有帮助:

enter image description here

对我来说,IBM的这个解释并没有很好地说明其中的区别:

  • 连接工厂 -- 应用程序用于获取与消息传递总线的连接。
  • 队列 -- 应用程序用来发送和接收消息。
  • 激活规范 -- 由应用程序的消息驱动 Bean 用于连接到队列并接收消息。

我发现的一个真正的区别是

会话 Bean 和实体 Bean [又名 MDP] 允许您发送 JMS 消息并同步接收它们,但不是异步接收它们。为了避免占用服务器资源,您可能不希望在服务器端组件中使用阻塞同步接收。要异步接收消息,请使用消息驱动的 Bean [MDB]。

因此,到目前为止,我不满意的清单是:

  • 将 ActivationSpec 与 MDB 一起使用,将 ConnectionFactory 与 POJO 一起使用(但是等等,POJO 也可以使用 ActivationSpec 吗
  • MDB的异步操作。MBP的同步运行。

我的问题是:还有其他区别吗?您能澄清一下其中的区别吗?

引用:


答案 1

@Jeffrey奈特:让我试着根据我的经验来澄清一下。

我们知道MDB是消耗传入消息的豆子。现在需要指定哪种消息,特定 MDB 要从哪个目标消费到哪个目标。

MDB基本上是一个消息端点。

在符合 JCA 标准的 MDB 之前:

流在网络球是:-

传入消息 --消息侦听器侦听> -->侦听器端口 -->传递到 MDB

因此,通常开发人员会创建一个 MDB 并在 ejb-jar 中指定消息目标详细信息.xml如下所示:

<message-driven-destination>
    <destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
<res-ref-name>jms/QCF</res-ref-name>
<resource-ref>
    <res-type>javax.jms.QueueConnectionFactory</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

部署程序需要创建侦听器端口并将部署的 MDB 关联到侦听器端口。上面指定的 QueueConnectionFactory 用于创建与队列的连接。

发布符合 JCA 标准的 MDB:

在JCA之后,MDB被视为JCA资源。JCA规范也包含消息传递框架API。在JCA的情况下的流程是:-

incoming message --> listened by Message listener --> Resource Adapter-->deliver to MDB

现在,由于JCA是为与任何类型的资源一起使用而创建的,无论是JDBC,JMS,EIS等,因此它具有为任何适配器创建配置的通用“激活规范”方式。在 ra.xml 文件中,提到了该特定适配器需要哪种激活规范才能正常工作。激活规范不是运行时实体,它只是资源适配器使用的配置详细信息。在上面的例子中,JCA适配器将使用激活规范中提到的队列连接工厂的连接。所以基本上队列连接工厂在上面两种情况下都是一样的。

对于 websphere,您可以使用 SIB(服务集成总线)目标进行消息传递,或者使用外部软件(如 websphere MQ)进行消息传递。

在用于消息传递的 SIB 目标的情况下 :- SIB 已实现 JCA 资源适配器。因此,在 SIB 上使用目标的 MDB 可以使用激活规范来指定目标详细信息。和资源适配器模块可以与消息传递引擎交互,并且可以将消息传递到 MDB。

对于像 websphere MQ 这样的外部消息传递框架:- 由于 websphere MQ 尚未实现任何 JCA 适配器,因此我们需要配置侦听器端口以连接到驻留在 websphere MQ 上的目标。是侦听器端口将消息传递到 MDB。

简而言之,这两种情况都使用队列连接工厂来获取队列连接。在一种情况下,它是用于传递消息的资源适配器(具有激活规范形式的配置信息),而在其他情况下,它是用于传递消息的侦听器端口(绑定到队列和工厂)。

我希望现在这能澄清。


答案 2

它们都是配置,但连接工厂用于出站消息,激活规范用于入站消息传递。

这就是我从IBM那里得到的。

激活规范是 JCA 1.5 规范的一部分。MDB 应用程序使用激活规范连接到 WebSphere MQ 队列管理器以处理入站消息。激活规范还提供了其他选项,例如安全设置。

JMS 连接工厂包含有关如何创建连接的信息。当应用程序需要 JMS 连接时,工厂会创建一个连接实例。连接工厂需要与您之前创建的激活规范相同的连接信息,但用于来自 MDB 的出站消息,而激活规范用于入站消息。


推荐