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

Spring 4 STOMP Websockets-如何实现多通道

曾华翰
2023-03-14

与最新的Spring 4教程中的STOMP和SockJS一样,我们发现了以下类型的RequestMapping:

家庭控制器。JAVA

@MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting(HelloMessage message) throws Exception {
        Thread.sleep(3000); // simulated delay
        return new Greeting("Hello, " + message.getName() + "!");
    }

现在,我试图通过修改此requestmapping来实现多通道支持:

@MessageMapping("/hello/{id}")
    @SendTo("/topic/greetings/{id}")
    public Greeting greetingMultichannel(HelloMessage message) throws Exception {
        this.info();
        Thread.sleep(300); // simulated delay
        return new Greeting(" Hello, " + message.getName() + "!");
    }

MessageMapping不起作用,sendTo不返回到单独指定的URL。虽然我确实订阅了正确的频道,并且消息没有出现问题,如图所示

调试日志:

正在打开Web套接字。。。跺脚js:130 Web套接字已打开。。。跺脚js:130

连接接受版本:1.1,1.0心跳:1000010000

stomp.js:130

跺脚js:130已连接到服务器未定义stomp。js:130已连接:已连接版本:1.1心跳:0,0

索引):23

订阅id:sub-0目的地:/topic/greetings/1

跺脚js:130

发送目的地:/app/hello/1内容长度:18

{“名称”:“文本文本”}

应该有回应,但没有回应。。

有人能看到我在这里错过了什么吗?

干杯,海因里希

共有1个答案

岳锦
2023-03-14

目前没有办法将参数传递给@SendTo/@SendToUser@Message映射上的占位符在@SendTo/@SendToUser中不可用。有一个开放的吉拉,留意它。

同时,使用SimpMessageTemplate

@Autowired 
private SimpMessagingTemplate simpMessagingTemplate;

@MessageMapping("/hello/{id}")
public void greetingMultichannel(HelloMessage message, @DestinationVariable("id") Long id) throws Exception {
    this.info();
    Thread.sleep(300); // simulated delay

    simpMessagingTemplate.convertAndSend("/topic/greetings/" + id, new Greeting(" Hello, " + message.getName() + "!"));
}

2015年9月8日更新:

从Spring 4.2开始,目标变量占位符可以在@SendTo/@SendToUser中使用。现在这是可能的:

@MessageMapping("/hello/{id}")
@SendTo("/topic/greetings/{id}")
public Greeting greetingMultichannel(HelloMessage message) throws Exception {
    this.info();
    Thread.sleep(300); // simulated delay
    return new Greeting(" Hello, " + message.getName() + "!");
}
 类似资料:
  • 这是我当前通过CloudFront成功上传文件到S3的代码: 现在对于分块上传(或者AWS术语中的多部分),我不知道如何通过CloudFront(只有S3的文档)来完成它。 它发送了一个预飞行请求(OPTIONS),并返回,其中包含以下响应头: 但实际的POST请求返回并带有以下响应头:

  • 问题内容: 这可能是一个重复的问题,因为我不知道用短语表达搜索查询。我正在用Java创建一个类似Zork的基于文本的游戏,角色将移动到彼此相连的不同房间。我希望能够列出玩家可用于此房间的所有选项。 例如,房间A向东连接到B,房间B向西连接到A,向南连接到C,向北连接到D,依此类推。 我应该使用哪种数据结构,或者应该如何尽可能高效地实现呢? 问题答案: 首先要确定什么是有效方向:它是来自固定列表还是

  • 问题内容: 我正在尝试使用JPA 2.0创建具有通用关系的多态实体。应该有两个表,一个事件表和一个通知表。在这些表内是彼此相关的具体实体,如下所示: 从逻辑上讲,这应该在hibernate状态下是可能的,因为在SQL中是可能的: 这就是我所拥有的: 使用此代码,我可以持久保存并获取任何Event,Notification,LoginEvent或NotificationEvent,但是当我尝试在JP

  • 问题内容: 我有两个表:书籍和文章,它们之间有多对多的关系。联接表是BookArticles。 models / books.js models / articles.js models / bookArticles.js 和models / index.js 但我无法获得书籍文章 我怎么才能得到它 ?? 问题答案: 已针对Sequelize v2 / 3/4/5更新 通常,我认为问题在于我们对创

  • 问题内容: 我正在尝试使用JPA 2.0创建具有通用关系的多态实体。应该有两个表,一个事件表和一个通知表。在这些表内是彼此相关的具体实体,如下所示: 从逻辑上讲,这应该在休眠状态下是可能的,因为在SQL中是可能的: 这就是我所拥有的: 使用此代码,我可以持久保存并获取任何Event,Notification,LoginEvent或NotificationEvent,但是当我尝试在JPA 2.0元模

  • 因此,我尝试将插入排序与必须传入的通用比较器一起使用。我无法更改方法名称。我如何实现一个比较器来传递到insertionSort方法中?我是java和面向对象编程的新手。 该测试只是一个junit测试。