我们有一个在 GlassFish 3.1.2.2 集群(两个实例)中运行的应用程序,它将其结果写入“the_output_queue”。
GlassFish 将 Message Queue 设置为嵌入式代理集群,该集群又具有两个直接对应于两个 GlassFish 实例的消息代理实例。
现在我想使用外部JMS 客户端(想想 Android 应用程序)使用 the_output_queue 的结果。
我假设 JMS 客户端可以以某种方式透明地访问代理集群,但我无法让它工作。我只成功地将 JMS 客户端连接到一个单独的代理。
如果我有一个正在运行的 JMS 客户端,连接到一个代理,我只能收到一半的消息。GlassFish 管理控制台中定义的物理队列 (the_output_queue) 存在于两个代理中,并且由于负载平衡,消息得到均匀分布。
对我来说,Oracle 手册中的这段文字听起来好像每条消息都应该在集群的所有代理实例中可用,即如果只有一个 JMS 消费者正在运行,它应该接收所有消息,而不管它连接到的代理实例如何。
“主代理负责将消息路由和传递给目的地的所有消费者,无论这些消费者是本地的(连接到主代理)还是远程的(连接到集群中的其他代理)。”
我完全误解了这一点吗?
JMS 客户端能否透明地访问 Oracle Message Queue 代理集群? 连接字符串的外观如何?
JMS 客户端是否可以连接一些“全局集群目标”(而不是单个代理)?在哪里可以找到集群的连接详细信息?
我必须验证 GlassFish 设置中有什么特别之处吗?当前的设置是(由 jelastic.com 创建的默认设置,对我来说看起来不错):
JMS 可用性:
- JMS 服务类型:嵌入式
- JMS 集群类型:常规
- JMS 配置存储类型:主代理
- JMS 消息存储类型:文件
GMS 已启用