尝试连接到部署在 Openshift 上的 ActiveMQ Artemis 时连接被拒绝

Connection refused when trying to connect to ActiveMQ Artemis deployed on Openshift

我们有一个 Openshift 项目 (project1),我们在其中使用图像设置了一个 AMQ Artemis 代理:amq- amq-broker-7-tech-preview/amq-broker-71-openshif。作为基本映像,我们没有任何配置,例如 SSL 或 TLS。为了进行设置,我们用作示例:https://github.com/jboss-container-images/jboss-amq-7-broker-openshift-image/blob/amq71-dev/templates/amq-broker-71-basic.yaml

在 Openshift 上部署映像后,我们有以下内容:

在 Java 中,我们尝试从另一个 Openshift 服务连接到代理,但收到以下错误:

[org.apache.activemq.transport.failover.FailoverTransport] (ActiveMQ Task-1) Failed to connect to [tcp://broker-amq-amqp-project1.192.168.99.105.nip.io:61616?keepAlive=true] after: 230 attempt(s) with Connection refused (Connection refused), continuing to retry.

Java代码:

user = "example";
password = "example";

String address = "queue/example";

InitialContext context = new InitialContext();

queue = (Queue) context.lookup(address);
ConnectionFactory cf = (ConnectionFactory) context.lookup("ConnectionFactory");
try (Connection connection = cf.createConnection(user, password);) {
    connection.start();
    session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
}

JNDI 属性文件

java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url=failover:(tcp://broker-amq-amqp-project1.192.168.99.105.nip.io:61616?keepAlive=true)?randomize=false
queue.queue/example=example/strings

当没有为相关服务定义路由时,您似乎正在尝试使用 OpenShift 路由连接到代理。您(或安装程序)为 Jolokia 定义了一个路由,但没有用于代理的路由。

您不会在此处收到有用的错误消息,因为 任何 以正确域结尾的主机名都将连接到 OpenShift 路由器。但是,路由器不知道如何处理没有有效路由的连接,并且可能只是 return 某种无意义的错误数据包到 JMS 客户端。

如果您尝试从与代理相同的 OpenShift 命名空间中的另一个应用程序连接到代理,则不需要通过路由器连接——只需使用服务名称(大概 broker-amq-tcp) 和 JMS 中明确的服务端口 set-up.

如果您从同一集群中不同 OpenShift 命名空间中的另一个应用程序连接到代理,您可以配置网络子系统以允许跨命名空间直接连接到服务。不幸的是,安装 OpenShift 后设置起来有点繁琐。

如果您从 OpenShift 命名空间外部连接到代理,并且您不能直接使用服务,则必须通过路由连接,并且您必须 使用加密连接。这不一定是为了安全——路由器将从 SSL header 读取 SNI 信息来计算如何路由请求。

因此您需要为代理的 SSL 端口创建一个服务,为该服务创建一个路由,从代理导出服务器证书,将这些证书导入您的客户端,并将客户端配置为使用 SSL 连接通过路由器的 URI。显然,如果可以的话,直接使用该服务更容易 ;)

Red Hat 的 AMQ7-on-OpenShift 文档中描述了所有这些 set-up 步骤:

https://access.redhat.com/documentation/en-us/red_hat_amq/7.5/html/deploying_amq_broker_on_openshift/index

尽管我不能否认该文档中包含大量信息。