在Weblogic OSB中,我们有一个代理服务,它应该使用来自远程Weblogic JMS队列的消息,并通过业务服务将它们路由到另一个远程Weblogic JMS队列。出于某种原因,消息被代理服务消耗,但它们永远不会被路由到业务服务。
当前行为:
启用后,OSB代理服务会删除放置在远程端点URI队列中的所有消息,但消息似乎不会在代理服务的消息流本身内流动。启用代理服务后,远程队列中的消息将被删除,但会被视为处于“挂起”状态。禁用代理服务后,消息将被放回队列中。
为什么在Proxy Service的消息流中不能处理消息的原因是什么?所有消息流都是,将消息路由到业务服务,然后业务服务将消息发送到另一个远程端点URI队列。
PS:当消息通过测试控制台注入代理服务时,消息流/路由到业务服务没问题,所以我认为问题必须在某个地方的初始远程队列/代理服务接口?也许权限或交易相关的问题?但我无法看到任何有关配置或服务器日志错误的提示......
提前感谢您提供任何帮助。
答案 0 :(得分: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队列开始按预期工作,而不对我的代理和业务服务的先前代码进行任何修改。
答案 1 :(得分:0)
在您的代理服务中,转到“操作设置”选项卡,并确保已启用“已启用跟踪调试”的日志记录。跟踪应设置为“完整”,大小设置为800.
此致 赛义德K
答案 2 :(得分:-1)
您可以设置JMS连接工厂的“每会话的MAx消息”属性:默认值为10,将其设置为1,一次只向每个消费者传递1条JMS消息。默认行为是最多10条消息被传递给同一个消费者,该消费者只有1个线程,因此所有10个消息都标记为待定,而只有1个正在处理。