【发布时间】:2023-03-13 00:44:01
【问题描述】:
我正在尝试让我的应用程序在 GKE 中运行。我正在使用来自 cloudamqp 的 RabbitMQ 实例。我通过 AMQP 将此实例用于我的微服务之间的所有内部消息传递。
现在我想使用 STOMP 通过 SockJS 使用 stompRelay 向浏览器发送消息。当我在本地(在我的开发机器上)连接到实例时,一切都像一个魅力。消息得到发送和确认,...
当我将应用程序移至生产环境 (GKE) 时,所有 AMQP 队列都能正常工作,但我无法让 STOMP 与中继器一起工作...... 当我使用 simpleBroker 时,一切正常。
我很确定代码是正确的,因为它可以在我的开发 PC 上正常运行。我认为这与 GKE 防火墙拦截有关。
我尝试通过允许 TCP 61613,61614 上的所有输入/输出流量来向 gce 上的防火墙添加额外规则。
错误
o.s.m.s.s.StompBrokerRelayMessageHandler : TCP connection failure in session _system_: No CONNECTED frame received in 60000 ms.
r.io.net.impl.netty.tcp.NettyTcpClient : CLOSED: [id: 0x5d96aa8d, /10.20.6.78:47136 :> xxxxxxxxxx.rmq.cloudamqp.com/35.195.232.78:61613]
我的码头文件
FROM openjdk:8-jre-alpine
RUN apk add --no-cache tzdata
ENV TZ Europe/Brussels
ENV SPRING_PROFILES_ACTIVE production
WORKDIR /app
ADD target/application.jar /app/application.jar
EXPOSE 8080
CMD ["java", "-jar", "application.jar"]
我的中继配置
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableStompBrokerRelay("/topic", "/queue")
.setRelayHost(relayHost)
.setRelayPort(relayPort)
.setSystemLogin(relayLogin)
.setSystemPasscode(relayPasscode)
.setVirtualHost(relayVHost)
.setClientLogin(relayLogin)
.setClientPasscode(relayPasscode);
}
我已经苦苦挣扎了 2 天,试图让它运行起来......
有人在 GKE 上使用外部 rabbitMQ 在 Spring-boot 中运行 STOMP 吗?
【问题讨论】:
标签: spring-boot rabbitmq google-kubernetes-engine stomp