在 glassfish 上,可以使用以下参考资料。
https://docs.oracle.com/cd/E19798-01/821-1794/aeooq/index.html
在上述参考资料中,您将获得 glassfish 支持的激活属性列表。例如,endpointExceptionRedeliveryAttempts -
当 MDB 在消息传递期间抛出异常时重新传递消息的次数
然后,您将获得以下参考,该参考描述了要在 glassfish 支持的 sun-ejb-jar.xml 上使用的有效 xml 元素。
https://docs.oracle.com/cd/E19798-01/821-1750/beaqm/index.html
最后,您可以配置 Mdb,如下面的代码片段所示。
<ejb>
<ejb-name>MyMdbWith0MsRedeliveryDelayAndMultipleRedeliveriesMdb</ejb-name>
<bean-pool>
<steady-pool-size>1</steady-pool-size>
<resize-quantity>1</resize-quantity>
<max-pool-size>1</max-pool-size>
</bean-pool>
<mdb-resource-adapter>
<activation-config>
<activation-config-property>
<activation-config-property-name>endpointExceptionRedeliveryAttempts</activation-config-property-name>
<activation-config-property-value>1000</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>endpointExceptionRedeliveryAttempts</activation-config-property-name>
<activation-config-property-value>0</activation-config-property-value>
</activation-config-property>
</activation-config>
</mdb-resource-adapter>
</ejb>
这应该确保对于这个特定的 mdb,glassfish 将立即传递一条消息,如果它失败,它将立即重试。
在您的 WAR 项目中,创建一个 sub-ejb-jar.xml 并将其放在 WEB-INF/sun-ejb-jar.xml 下。
如果您使用的是 maven,这将是您在 war 项目组件上的 src/main/webapp/WEB-INF/sub-ejb-jar.xml 路径。