2

在 Weblogic OSB 中,我们有一个代理服务,它只是应该使用来自远程 Weblogic JMS 队列的消息并通过业务服务将它们路由到另一个远程 Weblogic JMS 队列。出于某种原因,消息被代理服务消费,但它们永远不会被路由到业务服务。

当前行为:

启用后,OSB 代理服务会删除放置在远程端点 URI 队列中的所有消息,但消息似乎不会在代理服务的消息流本身中流动。启用代理服务后,远程队列中的消息将被删除,但仍处于“待处理”状态。当代理服务被禁用时,消息会被放回队列中。

代理服务的消息流中为什么不能处理消息的可能原因是什么?消息流所做的只是将消息路由到业务服务,然后将消息发送到另一个远程端点 URI 队列。

PS:当通过测试控制台将消息注入代理服务时,消息流/路由到业务服务没有问题,所以我认为问题一定出在某个地方的初始远程队列/代理服务接口?也许权限或交易相关的问题?但我在配置或服务器日志中看不到任何错误提示......

提前感谢您对此的任何帮助。

4

3 回答 3

2

我遇到了同样的问题,发现这可能是命名冲突问题。

如果您的资源名称重复,无论它们位于哪个服务器中,WebLogic 都可能产生意外行为。因此,根据 Oracle 的文档Best Practices for JMS Beginners and Advanced Users,您应该遵守以下命名规则:

  • 域名必须是唯一的。
  • WebLogic 服务器名称必须是唯一的,即使它们位于两个不同的域中。
  • JMS 服务器名称必须是唯一的,即使它们位于两个不同的域中。

举例说明发出上述语句的场景。我有以下有问题的拓扑:

|   WebLogic    |   IP          |   Domain      |   Server      |
|   WebLogic 1  |   10.10.10.73 |   osb_domain  |   osb_server1 |
|   WebLogic 2  |   10.10.10.83 |   osb_domain  |   osb_server1 |
|   WebLogic 3  |   10.10.10.93 |   osb_domain  |   osb_server1 |

注意域和服务器之间的名称冲突。即使我的 JMS 资源有不同的名称,这些命名冲突也足以引起问题。

然后我将拓扑更改为以下内容:

|   WebLogic    |   IP          |   Domain      |   Server      |
|   WebLogic 1  |   10.10.10.73 |   osb_domain1 |   osb_server1 |
|   WebLogic 2  |   10.10.10.83 |   osb_domain2 |   osb_server2 |
|   WebLogic 3  |   10.10.10.93 |   osb_domain3 |   osb_server3 |

这次没有更多的冲突,然后我的 JMS 队列开始按预期工作,而无需对我的代理和业务服务的先前代码进行任何修改。

于 2017-04-11T17:12:15.957 回答
0

在您的代理服务中,转到操作设置选项卡,并确保您已启用日志记录以调试启用跟踪。跟踪应设置为完整,大小为 800。

问候 Syed K

于 2013-10-08T11:37:01.793 回答
-1

您可以设置 JMS 连接工厂的“每个会话的最大消息数”属性:默认值为 10,将其设置为 1 以一次仅向每个使用者传递 1 条 JMS 消息。默认行为是最多将 10 条消息传递给同一消费者,该消费者只有 1 个线程,因此所有 10 条消息都标记为待处理,而只有 1 条正在处理。

于 2014-01-10T13:06:14.167 回答