JMS(esp Tibco EMS)是否可以在消息代理中拥有一个环境
我有一个消息代理,其中包含一些主题以及正在运行的某些应用程序集。现在,我想在相同的主题(如果可以的话,在相同的代理上)上运行一组新的相同的应用程序(例如QA环境)。做这个的最好方式是什么。由于我们的环境处于严峻的官僚机构之中,因此创建新的经纪人和/或者创建一组新的主题很麻烦。
解决方案
回答
AFAIK EMS不支持我们建议的任何内容。有几种选择可以满足需求。
拥有独立的EMS服务器将是理想的解决方案。这将使非生产环境具有一些功能,而不会在生产环境中引起问题。
使用同一服务器,我们可以在所有队列/主题名称上添加特定于环境的前缀。需要有一些应用程序级别设置,以使用哪个前缀(qa,dev,test,prod等)。这样可以很好地隔离环境,但是如果其中任何一个环境确实负载很重,则可能效果不佳。
对于主题,我们可以使用一些JMS标头属性和消息订阅来确定将它们路由到的环境。我不建议这样做,因为很容易搞砸它并破坏两个环境。
回答
我建议我们不要像在QA中同时使用相同的中间件服务器同时进行生产和质量检查(尤其是消息代理)那样,我们可能希望进行不希望影响生产的负载和浸泡测试。正如John所提到的,使用单独的服务器将是最简单的方法。
奇怪的是,为什么在QA环境中复制相同的主题会导致如此严厉的官僚主义;难道我们不可以将EMS的生产安装转储为垃圾场吗?
FWIW和一些消息代理,创建主题和队列有点琐碎。例如在Apache ActiveMQ应用程序中,开发人员选择他们想要使用的队列和主题名称,然后连接到适用于正确环境的代理,它就可以正常工作(尽管我们可以添加安全性以禁止某些用户创建主题/队列,如果我们想增加官僚作风: )。
作为旁白;我总是很可笑的是,在企业环境中,关于允许使用哪些队列/主题名称却有严格的政策,而在Web应用程序中,开发人员可以自由地在应用程序中使用他们想要的任何URI。毕竟,在这两种情况下,它们只是逻辑名称,中间件应该能够以任何一种方式工作并支持审计:)
回答
可以通过在邮件主题/队列或者"主题"中添加限定词来实现此要求,因此可以在同一服务器上将环境模式从DEV隔离到TEST。请记住,不建议跨环境传递消息通过使用相同的EMS服务器。
此特殊要求应在"主题命名约定"中解决,这是SOA体系结构中的一项经典任务,定义消息格式,消息交换模式和主题设计等。
例如,主题可以是.....哪里是DEV或者TEST或者UAT等