如何解决尝试连接到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
解决方法
在没有为相关服务定义路由的情况下,似乎您正在尝试使用OpenShift路由连接到代理。您(或安装程序)为Jolokia定义了一条路线,但经纪人没有路线。
您在这里不会收到有用的错误消息,因为以正确域结尾的任何主机名将连接到OpenShift路由器。但是,路由器将不知道如何在没有有效路由的情况下处理连接,并且可能只会向JMS客户端返回某种毫无意义的错误包。
如果您尝试从与代理相同的OpenShift命名空间中的另一个应用程序连接到代理,则无需通过路由器进行连接-只需使用服务名称(大概为broker-amq-tcp
)和服务端口在您的JMS设置中明确显示。
如果要从同一集群中不同OpenShift命名空间中的另一个应用程序连接到代理,则可以配置网络子系统以允许跨命名空间直接连接到服务。不幸的是,这是在安装OpenShift之后进行的一些简单设置。
如果要从OpenShift命名空间外部连接到代理,并且不能直接使用服务,则必须通过路由进行连接,并且必须使用加密连接。但这不一定出于安全考虑-路由器将从SSL标头中读取SNI信息,以确定如何路由请求。
因此,您需要为代理的SSL端口创建服务,为该服务创建路由,从代理中导出服务器证书,将这些证书导入客户端,并配置客户端以通过以下方式使用SSL连接URI:路由器。显然,如果可以的话,直接使用服务会更容易;)
所有这些设置步骤在Red Hat的OpenShift AMQ7文档中进行了描述:
尽管我不能否认在该文档中有大量的信息可以通过。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。