当前位置: 首页 > 知识库问答 >
问题:

通过使用外部消息代理,Spring作为代理中继

南门宇
2023-03-14

我想使用Spring消息为我的webapp的登录用户创建一个实时通知系统。

我定义了一个AbstractWebSocketMessageBrokerConfigrer如下:

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/notifications").withSockJS()
        .setSessionCookieNeeded(true)
        .setWebSocketEnabled(true);
}

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.enableSimpleBroker("/topic/", "/queue/");
}

根据文件规定:

应用程序可以发送针对特定用户的消息。Spring的STOMP支持识别前缀为“/user/”的目的地。例如,客户机可能订阅目标“/用户/队列/位置更新”。此目的地将由UserDestinationMessageHandler处理,并转换为用户会话特有的目的地,例如“/queue/position-updates-user123”。这提供了订阅通用名称目的地的便利,同时确保与订阅同一目的地的其他用户不发生冲突,以便每个用户都可以接收唯一的股票头寸更新。

在发送端,消息可以发送到一个目的地,例如/user/{username}/队列/位置更新,这反过来将由UserDestinationMessageHandler翻译成一个或多个目的地,每个目的地对应于与用户关联的每个会话。这允许应用程序中的任何组件发送针对特定用户的消息,而不必知道他们的名称和通用目的地以外的任何信息。这也通过注释和消息模板得到支持。

通过将消息发送到/user/{username}/queue/something,它将只发送给由{username}标识的特定用户。

现在,我正在寻找一种解决方案,允许我使用外部消息代理(例如,RabbitMQ),将Spring用作代理中继:

registry.enableStompBrokerRelay("/topic/", "/queue/");

在Spring中配置外部Message Broker后:

  • 是否可以使用as通道/user/{username/}/queue/something,在MessageBroker上发送消息?如果是,如何进行

共有1个答案

史昀
2023-03-14

是的,这是可能的,如果启用外部代理,每个@MessageMapping返回值都将被序列化为JSON并发送给代理,有关更多详细信息,请参阅参考文档的消息流部分。因此,这与简单的代理基本相同。

您还可以注入SimpMessageTemplate或SimpMessageSendingOperations bean,就像在我的OpenSnap示例应用程序中一样。您可以从控制器使用它,也可以从纯推送上下文中的任何其他类使用它。

您可以通过向您的@Message映射或@Subcribe映射处理程序方法添加主体参数来检索主体,就像这里所做的那样,当前主体将被自动注入。

 类似资料:
  • 我是芹菜、Redis和RabbitMQ的新手。 目前,我正在使用RabbitMQ作为消息代理,并且在配置中没有设置任何内容。(使用Django、MySQL) 我想知道是否有可能使用Redis作为后端的结果存储,同时将RabbitMQ用作消息代理。 我知道的只是添加一些设置,

  • 我将使用JMeter测试web应用程序。我已经记录并参数化了脚本,这些脚本似乎运行良好。问题是,其中一个要求是通过mitmproxy重定向流量。我已经找到了如何将流量重定向到所需代理的解决方案:如何从另一个代理后面为JMeter设置代理? 要手动完成这个场景,我要在Firefox浏览器中设置手动代理配置,然后导航到mitm.it如果启用了代理,我将下载客户端证书。一旦受信任,所有流量都会通过这个代

  • 在本公司的最后一个项目中:客户提出身份验证等请求,应用程序第一层得到客户请求并在Kafka上生成消息,核心服务消费该消息后向银行服务提出rest请求,得到响应后在Kafka上生成响应消息,应用程序第一层将消息传递给客户。是真的Kafka用例,还是去掉第一层和Kafka,在客户端和核心之间使用rest服务更好。谢谢

  • 我们需要将消息从一个ActiveMQ代理复制到另一个代理。这里消息必须只是复制,并且消息应该存在于两个代理中。 我可以想到一个自定义应用程序,它订阅某个目标并读取该消息并将消息重新发布到多个代理中的目标。 我没有权限在经纪人中进行更改,所以我想不出经纪人网络选项。 是否有任何最佳实践或工具可用于将A-MQ消息从一个代理复制到另一个代理?

  • 问题内容: 我需要将node-XMLHttpRequest应用程序部署到使用代理访问Internet的服务器上。在该服务器上的终端中,我可以并且运行正常。我认为在这种情况下可以识别环境变量。节点应用超时,因为它看不到代理。如何获取节点应用程序以使用代理? 例如,我可以使用http.globalAgent通过代理发送请求吗? 问题答案: 该派生添加了一个配置对象,该对象可以指定要使用的代理。 htt

  • 问题内容: 在程序中使用用户身份验证的代理的最佳/最简便方法是什么?我目前有这个,但是打开浏览器时我需要输入用户名和密码。 问题答案: 您可以使用Proxy Auto auth插件实现相同的功能 使用以下扩展程序下载扩展程序 https://chrome.google.com/webstore/detail/get- crx/dijpllakibenlejkbajahncialkbdkjc/rel