我见过这个问题的零碎部分,但没有什么能直接回答这个问题。
以下是假设的环境:
我们希望Joe和他的浏览器(可能使用Flash或HTML5或任何客户端技术)接收所有发布到所有20个服务器都可用的JMS主题的消息。
以下是一个例子:
这里的事情对我来说有点模糊。
我想我有点不清楚什么是“订阅”(流程明智的),以及它与集群服务器之间的关系。我正在处理长轮询(cometd)和websockets,以便在接收主题消息时帮助客户端响应,但当有许多服务器可以处理连接和订阅时,我必须考虑这将如何工作。我想避免服务器钉死。
谢谢你的指点。
EDIT1 :希望能澄清一下。在这里,我指的是一些在BlazeDS框架中可用的特定内容。它允许HTTP客户机订阅JMS主题,并使用长轮询来实现近乎实时的客户端更新,但它要求客户端一旦到达服务器,所有请求都必须返回到该服务器。所以它必须(以某种方式?)保持该服务器上该客户端的主题订阅活动。我想摆脱这一需求(任何技术/框架)。
发布于 2013-01-10 03:53:25
正是我一直在寻找的解决方案。 --它描述了问题和解决方案(用更简洁的话说:-) --参见“JMS持久性主题的局限性”
发布于 2013-01-08 05:08:35
JMS服务器跟踪所做的每一个订阅,并在持久订阅和非持久订阅之间做出区别。假设您有客户端A、B、C和一个主题T。
消息服务器上有管理设置,用于控制jms服务器等待持久订阅服务器返回并声明消息的时间长度,然后再将消息发送到死信队列或等待订阅服务器返回并声明的主题上的最大邮件数。您确实需要平衡永不松散的消息与流消息之间的关系,并耗尽内存或磁盘空间。
请注意,持久队列的概念与持久订阅服务器的概念不同。持久队列和主题通过在确认接收消息之前将队列和消息的内容写入磁盘来保护您避免JMS服务器崩溃。持久订阅服务器是关于当消息到达时,当客户端未连接时,消息发生了什么。
老答案。
以SQL数据库的方式来考虑JMS服务器。从web容器的角度来看,应该有到JMS服务器的连接池,所以您要做的是获取到JMS服务器的连接并订阅一个主题。例如。
因此,如果要使用一个主题,则必须使用选择性使用者使用该主题中的消息,请参见http://www.eaipatterns.com/MessageSelector.html,选择使用者将做的是从符合特定条件的主题中检索消息。例如,将JMS消息发布到主题的消息生成器应该包括一个标题或名为targetUser的JMS属性,然后消费者可以说给出来自AddressChangeTopic的任何消息,其中自定义属性targetUser="Joe“(参见一些示例选择器示例这里 )。
关键是要认识到,您可以以查询数据库表的方式查询队列或主题,但查询语法非常有限。从概念的角度来看,我强烈推荐企业集成模式手册http://www.amazon.ca/Enterprise-Integration-Patterns-Designing-Deploying/dp/0321200683
https://stackoverflow.com/questions/14207943
复制相似问题