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

时间:2020-09-22 12:45:25

标签: java openshift activemq-artemis

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

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

  • broker-amq-amqp(5672 / TCP 5672)无路由
  • broker-amq-jolokia(8161 / TCP 8161)https://broker-amq-jolokia-project1.192.168.99.105.nip.io
  • broker-amq-mqtt(1883 / TCP 1883)没有路由
  • broker-amq-stomp(61613 / TCP 61613)没有路由
  • broker-amq-tcp(61616 / TCP 61616)没有路由

在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

1 个答案:

答案 0 :(得分:1)

在没有为相关服务定义路由的情况下,似乎您正在尝试使用OpenShift路由连接到代理。您(或安装程序)为Jolokia定义了一条路线,但经纪人没有路线。

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

如果您尝试从与代理相同的OpenShift命名空间中的另一个应用程序连接到代理,则无需通过路由器进行连接-只需使用服务名称(大概为broker-amq-tcp)和服务端口在您的JMS设置中明确显示。

如果要从同一集群中不同OpenShift命名空间中的另一个应用程序连接到代理,则可以配置网络子系统以允许跨命名空间直接连接到服务。不幸的是,这是在安装OpenShift之后进行的一些简单设置。

如果要从OpenShift命名空间外部连接到代理,并且不能直接使用服务,则必须通过路由进行连接,并且必须使用加密连接。但这不一定出于安全考虑-路由器将从SSL标头中读取SNI信息,以确定如何路由请求。

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

所有这些设置步骤在Red Hat的OpenShift AMQ7文档中进行了描述:

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

尽管我不能否认在该文档中有大量的信息可以通过。

相关问题