【发布时间】:2022-01-12 19:37:50
【问题描述】:
我们使用红帽 7.2 EAP。我们有 Y 台机器上的 X 台生产者向远程机器上的 JMS 队列发送消息。 JMS 队列配置有主和备份。 Y 台机器上的 X 个消费者正在消费队列中的消息。 master和backup在不同的机器上。当主服务器宕机时,生产者和消费者需要继续处理消息。当主服务器回来时,消费者和生产者需要故障回复到主服务器。
我已多次阅读 Red Hat 发布的文档,并且我认为这应该很容易做到。但是,当消费者或生产者启动并且主服务器关闭时,他们没有任何方式连接到备份队列。人们如何处理这种情况?是否必须对消费者和生产者进行编程以了解主节点和备份节点,然后在主节点不可用或失败时尝试连接到备份节点?该文档使我相信故障转移应该是自动的,因为主服务器在第一次连接时会将备份位置传达给客户端。如果涉及数十台机器,主备备份的配置如何到达消费者和生产者?每个消费者/生产者节点都必须配置 IP 地址吗?人们如何使这类事物规模化?
我们目前将生产者和消费者设置为这样连接:
final Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);
env.put(Context.PROVIDER_URL, System.getProperty(Context.PROVIDER_URL, PROVIDER_URL));
env.put(Context.SECURITY_PRINCIPAL, DEFAULT_USERNAME);
env.put(Context.SECURITY_CREDENTIALS, DEFAULT_PASSWORD);
namingContext = new InitialContext(env);
【问题讨论】:
-
您是否使用 JNDI 来查找您的 JMS 连接工厂和目的地?
-
您是在客户端还是在服务器端寻求帮助?
-
我们目前设置生产者和消费者的方式是这样连接的:final Properties env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY); env.put(Context.PROVIDER_URL, System.getProperty(Context.PROVIDER_URL, PROVIDER_URL)); env.put(Context.SECURITY_PRINCIPAL, DEFAULT_USERNAME); env.put(Context.SECURITY_CREDENTIALS, DEFAULT_PASSWORD);命名上下文 = 新的 InitialContext(env);为生产者。这些是我们做过的实验。虽然我们能够获得连接并传递消息,但我认为我们配置不正确。
-
请注意,应直接对您的原始问题进行澄清,而不是在 cmets 中。这样人们就可以只阅读问题,而不必深入研究 cmets 来获取所有相关细节。
-
就像当我们获得数据库连接时,我们不必知道应用程序代码中数据库的任何细节。或者数据库是集群的。
标签: jms activemq-artemis failover jboss-eap-7