小编Kri*_*off的帖子

使用 Spring WebSocket 的 SimpMessagingTemplate 进行多端点配置

我使用 Spring 4.3.5 和 WebSocket 以及 SockJS、STOMP 和 SimpleBrokerMessageHandler。

在我的应用程序中,我有三个单独的 WebSocket 端点在不同的地址上运行:/endPointA、/ednpointB、/endpointC 更具体地说,我有三个单独的配置类,并用 @Configuration @EnableWebSocketMessageBroker 注释进行注释。

我还有一个具有 @Autowired SimpMessagingTemplate 的类。

最后,我有三个客户端,每个客户端都连接到一个不同的端点。然而,所有这些都订阅了“相同”的频道地址,即/topic/messages

  • ClientOne 连接端点A
  • ClientTwo 连接端点B
  • ClientThree连接的是端点C

当我使用SimpMessagingTemplate向/topic/messages发送内容时,所有客户端都会收到此消息。

之后我有两个问题:

  1. 有没有办法“隔离”Web Socket 端点,以便消息不会传播到所有端点?
  2. 为什么这实际上发生在这里?

我做了一些调查(堆转储分析),发现对于我的配置,我有:

  • SimpMessagingTemplate的三个实例,但是我始终使用同一个实例来发送消息(因为 @Autowire - 另外我正在打印 SimpMessagingTemplate.toString())。
  • SimpleBrokerMessageHandler的一个实例
  • SockJsWebSocketHandler的三个实例

所以我想知道,在所有端点上的消息传播是否是 SimpleBrokerMessageHandler 或 SimpMessagingTemplate 的“功能”。

java spring websocket spring-4 spring-websocket

5
推荐指数
1
解决办法
2802
查看次数

从 LambdaMetafactory 创建 BiConsumer

我正在尝试通过 LambdaMetafactory 动态创建 BiConsumer 类型的方法引用。我试图应用在https://www.cuba-platform.com/blog/think-twice-before-using-reflection/上找到的两种方法 - createVoidHandlerLambda 和这里Create BiConsumer as Field setter 而不反映Holger 的答案。

但是在这两种情况下我都遇到以下错误:

Exception in thread "main" java.lang.AbstractMethodError: Receiver class org.home.ref.App$$Lambda$15/0x0000000800066040 does not define or inherit an implementation of the resolved method abstract accept(Ljava/lang/Object;Ljava/lang/Object;)V of interface java.util.function.BiConsumer.
    at org.home.ref.App.main(App.java:20)
Run Code Online (Sandbox Code Playgroud)

我的代码是这样的:

public class App {

    public static void main(String[] args) throws Throwable {
        MyClass myClass = new MyClass();
        BiConsumer<MyClass, Boolean> setValid = MyClass::setValid;
        setValid.accept(myClass, true);

        BiConsumer<MyClass, Boolean> mappingMethodReferences = createHandlerLambda(MyClass.class);
        mappingMethodReferences.accept(myClass, true);
    }

    @SuppressWarnings("unchecked")
    public …
Run Code Online (Sandbox Code Playgroud)

java reflection method-reference lambda-metafactory

3
推荐指数
1
解决办法
681
查看次数