我有一个 Python 和 Java Spring 应用程序以两种方式进行通信。该堆栈主要构建在 Java/Spring 上,因此 ActiveMQ 和 JMS 是合乎逻辑的选择。但是,我们添加了一个需要与其余服务交互的 Python 应用程序,因此我使用了 qpid proton(AMQP 库)并在 ActiveMQ 配置中添加了以下配置以使其工作:
<transportConnectors>
<transportConnector name="openwire" uri="ssl://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqps" uri="amqp+ssl://0.0.0.0:5671?maximumConnections=1000&wireFormat.maxFrameSize=104857600&transport.transformer=jms"/>
</transportConnectors>
Run Code Online (Sandbox Code Playgroud)
它在 ActiveMQ 上完美运行,并允许使用 AMQP 客户端发送/接收 JMS TextMessage。
不幸的是,Amazon MQ 拒绝了此配置并返回了以下错误:
元素“transportConnector”上属性“name”的值“amqp+ssl”就其类型“protocol”而言无效。和 cvc-enumeration-valid:值 'amqps' 对于枚举 '[openwire]' 不是方面有效的
AWS 将 Amazon MQ 作为托管 ActiveMQ 服务进行营销,但它们似乎缺乏功能,因为从 5.8 版开始就可以使用从 AMQP 到 JMS 的映射:https : //activemq.apache.org/amqp和我的 Amazon MQ 代理m 使用的是版本 5.15.12
我尝试将amp;transport.transformer=jms和transport.transformer=jms标头添加到代理 URL 的查询字符串中,并在 Python 应用程序中使用 STOMP 作为协议(因为它是纯文本协议)而不是 AMQP,但这些都不起作用。
那么,您知道我可以在 Python 应用程序中发送 …
2019-08-01 06:04:43,263 | 错误| 无法接受连接:org.apache.activemq.transport.tcp.ExceededMaximumConnectionsException:超出允许的最大客户端连接数。请参阅 ActiveMQ 配置文件(例如,activemq.xml)中 TCP 传输配置 URI 上的“maximumConnections”属性。org.apache.activemq.broker.TransportConnector | org.apache.activemq.broker.TransportConnector | ActiveMQ 传输服务器线程处理程序:nio+ssl://b-e13f27f2-1fa3-419f-819c-a24277e973a8-2.mq.us-west-2.amazonaws.com:61617?maximumConnections=100&wireFormat.maxFrameSize=104857600
在 amazonMQ 上出现上述异常,之前我们使用 activeMQ,我们设置了类似的内容
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireformat.maxFrameSize=104857600"/>
</transportConnectors>
Run Code Online (Sandbox Code Playgroud)
在 amazonMQ 中,我们无法找到此类选项,并且代理抛出异常。我们检查了 amazonMQ 支持的 TransportConnector :
知道如何增加最大连接的大小吗?
我正在测试 amazonMQ 的主从功能,我想在负载下触发故障转移,并确保我的订阅者收到所有发送的消息。
我在 gui 或 cli 中看不到任何触发故障转移场景的选项。我尝试重新启动代理,但这会影响两个节点。可以预见的是,这导致我的测试失败,因为当我的客户端尝试重新连接时备用代理不可用。
令人欣慰的是,我的客户确实尝试立即重新连接到备用代理,但我仍然无法确定如果发生故障转移情况,所有消息都会通过。
这有可能吗?
有没有人设法通过SSL使用.NET Core 2.0连接到AmazonMQ?
我使用Apache.NMS.ActiveMQ.Core包连接时出现以下错误:
System.NotSupportedException: The requested security protocol is not supported.
at System.Net.SecurityProtocol.ThrowOnNotAllowed(SslProtocols protocols, Boolean allowNone)
at System.Net.Security.SslStream.AuthenticateAsClient(String targetHost, X509CertificateCollection clientCertificates, SslProtocols enabledSslProtocols, Boolean checkCertificateRevocation)
at Apache.NMS.ActiveMQ.Transport.Tcp.SslTransport.CreateSocketStream()
at Apache.NMS.ActiveMQ.Transport.Tcp.TcpTransport.Start()
at Apache.NMS.ActiveMQ.Transport.WireFormatNegotiator.Start()
at Apache.NMS.ActiveMQ.Connection.CheckConnected()
at Apache.NMS.ActiveMQ.Connection.CreateActiveMQSession(AcknowledgementMode ackMode)
at SendToMQ.Program.SendMessage() in C:\GITLab\POC\SendToMQ\SendToMQ\SendToMQ\Program.cs:line 40
at SendToMQ.Program.Main(String[] args) in C:\GITLab\POC\SendToMQ\SendToMQ\SendToMQ\Program.cs:line 15
Run Code Online (Sandbox Code Playgroud)
使用以下代码:
string url = "ssl://url:61617";
string userName = "name";
string password = "pw";
string payLoad = "This is a test.";
IConnectionFactory factory = new ConnectionFactory(new Uri(url));
using (IConnection connection = factory.CreateConnection(userName, password)) …Run Code Online (Sandbox Code Playgroud) 我想通过 websocket 使用 stomp 并打算与 Amazon MQ 集成,但 Amazon MQ 默认使用 stomp+ssl,然后我遇到了问题。
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Autowired
private ActiveMQProperties activeMQProperties;
/**
* Register STOMP endpoints mapping each to a specific URL and (optionally)
* enabling and configuring SockJS fallback options.
*
* @param registry
*/
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/endpoint").setAllowedOrigins("*");
}
/**
* Configure message broker options.
*
* @param registry
*/
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableStompBrokerRelay("/queue", "/topic")
.setAutoStartup(true)
.setVirtualHost(activeMQProperties.getHost())
.setRelayHost(activeMQProperties.getHost()) …Run Code Online (Sandbox Code Playgroud) 我正在使用 spring WebSocket、SockJs 和 Amazon MQ 构建一个示例聊天应用程序。当客户端订阅主题时,它会抛出“代理不可用”异常。所有入站流量规则都在 AWS 安全组中正确设置,并且代理也有 stomp 支持。我正在关注这个Spring Guide。
如果我使用的是内存代理,它工作正常。我非常感谢您对此的帮助,以下是示例代码。
代理:Amazon MQ(内部使用 Active MQ)
版本:5.15.0
WebSocketConfig.java
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableStompBrokerRelay("/topic")
.setRelayHost("***********.mq.us-east-2.amazonaws.com").setRelayPort(61614)
.setClientLogin("******").setClientPasscode("*****");
registry.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chat-endpoint").withSockJS();
}
Run Code Online (Sandbox Code Playgroud)
应用程序启动日志
.......
INFO 14280 --- [alina-utility-1] o.s.m.s.s.StompBrokerRelayMessageHandler : Starting...
INFO 14280 --- [alina-utility-1] o.s.m.s.s.StompBrokerRelayMessageHandler : Starting "system" session, StompBrokerRelay[ReactorNettyTcpClient[reactor.netty.tcp.TcpClientDoOn@7acb7b3e]]
INFO 14280 --- [alina-utility-1] o.s.m.s.s.StompBrokerRelayMessageHandler : Started.
......
Run Code Online (Sandbox Code Playgroud)
客户
var socket = new SockJS('/chat-endpoint');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
setConnected(true); …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的 Spring-Boot 应用程序连接到作为 AWS 服务托管的 RabbitMQ。启动应用程序时出现以下异常。
我还包括 java 异常、Spring Boot 和 AWS 的配置
2021-05-15 09:31:50.651[0;39m [32m INFO[0;39m [35m12988[0;39m [2m---[0;39m [2m[ main][0;39m [36mo.s.j.e.a.AnnotationMBeanExporter [0;39m [2m:[0;39m Bean with name 'rabbitConnectionFactory' has been autodetected for JMX exposure
[2m2021-05-15 09:31:50.655[0;39m [32m INFO[0;39m [35m12988[0;39m [2m---[0;39m [2m[ main][0;39m [36mo.s.j.e.a.AnnotationMBeanExporter [0;39m [2m:[0;39m Located managed bean 'rabbitConnectionFactory': registering with JMX server as MBean [org.springframework.amqp.rabbit.connection:name=rabbitConnectionFactory,type=CachingConnectionFactory]
[2m2021-05-15 09:31:50.678[0;39m [32m INFO[0;39m [35m12988[0;39m [2m---[0;39m [2m[ main][0;39m [36mo.s.c.support.DefaultLifecycleProcessor [0;39m [2m:[0;39m Starting beans in phase 0
[2m2021-05-15 09:31:50.678[0;39m [32m INFO[0;39m [35m12988[0;39m [2m---[0;39m [2m[ main][0;39m …Run Code Online (Sandbox Code Playgroud) spring amazon-web-services spring-rabbit spring-boot amazon-mq
我在 Amazon MQ 上创建了一个代理,并在端口 61617 上获得了一个 SSL 端点。我也在寻找一个非 SSL 端点(就像我们可以在 Active MQ 上的 61616 上拥有 tcp)。Amazon MQ 是否仅提供 SSL?无论如何,我们也可以获得TCP端点吗?
我已经设置了一个 Amazon MQ 代理,并且您生成了一个域 *.mq.eu-west-2.amazonaws.com
生成的是一个非常长的 DN,我想要做的是将其映射到我自己域的子域。
由于所有 AWS 服务都通过 SSL,我还需要该子域的证书,我通常只使用 ACM。
问题是我不能只生成域的 CNAME,然后生成 SSL 证书,因为这不起作用。AWS在route53中提供了所谓的ALIAS A记录,对于其他服务来说可以解决这个问题,但它似乎不适用于Amazon MQ。您获得的选项不包括 MQ 服务。
看看一些 AWS 文档,听起来我需要执行以下操作(但看起来有点矫枉过正)
还有其他人对如何最好地解决这个问题有任何建议吗?