问题标签 [spring-messaging]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1687 浏览

spring - 如何使用 Spring 的 MessageSendingOperations 发送普通的未转义字符串?

我正在使用 Spring Messaging 和 Spring Socket 4.0.5.RELEASE

我想向代理发送一条纯字符串消息。事实证明,这样的字符串被转义了,例如在服务器端执行以下操作时:

然后订阅的 STOMP 客户端会收到以下消息:

因此有效载荷包括周围的引号和转义的引号。

如何发送未转义的“正常”字符串?

0 投票
1 回答
884 浏览

spring - 在内部订阅 spring-websocket 消息

我正在使用 spring-websocket 将消息推送到浏览器客户端。

我的设置几乎与投资组合示例中的设置相同,我使用MessageSendingOperations发送消息:

这完美地工作。

但我也希望能够在内部订阅相同的消息。

MessageReceivingOperations几乎看起来像使用的那个,但它似乎只支持拉消息。我更希望将消息推送到我的服务。

SubscribableChannel.subscribe()看起来也很有希望,但是我如何获得正确的频道呢?

我真的很希望能够调用类似的东西

0 投票
5 回答
13383 浏览

java - Spring Websockets @SendToUser 无需登录?

我有一个带有 websocket 功能的简单 spring 应用程序,到目前为止一切正常。现在我想使用 @SendToUser 注释从我的服务器向特定客户端发送一条消息。这给了我错误“忽略消息,没有可用的主体信息”。我知道我的服务器上没有任何登录,所以每个用户都是“匿名的”并且没有主体(我现在没有使用 spring security)。但是每个用户都有一个会话 ID。是否可以以某种方式使用会话 ID 来区分用户?我怎样才能做到这一点,以便我的用户获得与会话 ID 对应的主体?

0 投票
1 回答
1020 浏览

spring - Spring消息传递websockets - 如何调用setMessageCodec

我正在尝试使用 Spring websocketsGenson而不是Jackson. 当我尝试从客户端连接时,我得到以下信息:

看来我需要设置自定义消息编解码器。

我可以看到一个.setMessageCodec方法出现在上,TransportHandlingSockJsService但我看不到配置选项中可以实际设置它的任何地方。

我认为该.setMessageCodec方法应该存在于SockJsServiceRegistration类中,因此可以从配置中设置它......但它不是......任何想法?

编辑:我相信这是一个错误,所以提出了:https ://jira.spring.io/browse/SPR-12091

0 投票
1 回答
1161 浏览

java - 使用 Spring 和外部消息代理进行消息传递

我的用例考虑了三个参与者:

  • 消息生产者(例如,远程后端);
  • 消息代理(例如RabbitMQ
  • 一个消息消费者(一个基于SpringWeb 应用程序,在自己的AS上)。

通信过程如下:

  1. 消息生产者创建消息(通过指定接收者,然后将其发送到 消息代理
  2. Message Broker将消息中继到Message Consumer
  3. 消息消费者接收消息,然后使用WebSocket将其传递给特定用户(通过映射收件人用户名) 。

是否有可能实现这个场景?

0 投票
2 回答
9542 浏览

spring - 在 Spring 中使用 STOMP 和 WebSocket 向特定用户发送消息时检查身份验证

我正在Spring 4中使用内置Message BrokerSTOMP over WebSocket开发实时通知系统。

我希望能够根据他的用户名向特定用户发送消息。为了达到这个目的,我使用的convertAndSendToUser是class的方法org.springframework.messaging.simp.SimpMessagingTemplate,如下:

作为配置:

客户端(通过JavaScript),我应该通过指定用户名来订阅频道(根据另一个非常相似的问题:在 Spring Websocket 上向特定用户发送消息)。

最后一点听起来很奇怪......

假设我在我的 webapp 上登录为w.white,通过订阅:

...我将能够看到发送到w.white的消息,这太棒了...但是订阅:

...我也将能够看到发送到j.pinkman的消息,尽管我目前登录为w.white

这是一种克服这个问题的方法吗?


更新

下面是关于通过 WebSocket 进行连接的日志:

0 投票
2 回答
7880 浏览

spring - Spring Stomp @SendToUser 未经身份验证的用户无法正常工作

我正在尝试使用@SendToUser.

  • 春天 4.1.1

我正在使用一个新创建的 Spring Boot 应用程序,我唯一的配置是:

控制器代码:


JS:

弹簧输出:

JS:

弹簧输出:


在我看来,Spring 将订阅映射到/search-usershizav88. 然后用于/search-usershizav88发送响应。但是我的 JS 客户端没有收到任何东西。

有什么问题?

0 投票
0 回答
305 浏览

spring - 当返回值被延迟时,使用 @SubscribeMapping 注释方法进行类似 RPC 的行为

我真的很喜欢 @SubscribeMapping 方法来使用 STOMP-over-Websocket 实现类似 RPC 的语义。

不幸的是,它的“魔法”要求带注释的方法返回一个值。但是,如果返回值不容易获得怎么办?我想避免在等待它的方法内部阻塞。相反,我想传递一个回调,该回调将在它准备好时发布一个值。我想我可以在回调中使用消息模板的 convertAndSendToUser() 来做到这一点。事实证明@SubscribeMapping 处理非常特殊,并且对于 SimpMessageSendingOperations 的实例是不可能的。

我可以通过在 SubscriptionMethodReturnValueHandler 上调用 handleReturnValue() 来实现我的目标,但是如果不是 hackish(比如向 handleReturnValue() 提供 MethodParameter 的虚拟实例),那么它的整体机制就会非常乏味:

所以我的问题很简单:有没有更好的方法?

0 投票
0 回答
673 浏览

spring - Detecting disconnects using Spring messaging (websockets / STOMP)

We're using spring-messaging websocket with STOMP. Now we've defined multiple @SubscribeMapping methods, but is there also some sort of callback that gets fired when a client application disconnects from the socket?

We got a list of connect clients and some additional properties, like status. Status field needs to be updated when the client application disconnects.

Any suggestions on how to achieve this in Spring? I've tried implementing ApplicationListener however, there's no usefull information in the OnSessionDisconnect object.

0 投票
2 回答
11071 浏览

java - 如何使用我的 .properties 文件中的自定义消息,但使用 @Size 注释提供的参数?

这应该是一个简单的问题,但我找不到直接的解决方案。

我正在使用 Spring Message Resource 从 .properties 文件中提供系统上的所有文本。我需要它来解决国际化问题,并且不能使用 Spring 的默认消息。

这是问题所在:

我的 .properties 文件中有以下行:

验证码是:

但是,当向字段发送无效值时,消息是:

"Invalid name ({min}, {max})"而不是"Invalid name (3, 5)"

我尝试了几种解决方案但均未成功,例如:

但如果我只使用

然后,我从 Spring 获得默认消息(我不想使用)。我需要的非常简单:使用自定义 .properties 文件中的我自己的消息,但使用 @Size 注释提供的参数。

有什么建议么?

先感谢您。