solon-net-stomp
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-net-stomp</artifactId>
<version>3.0.2-M7</version>
</dependency>
1、描述
网络扩展插件。提供基础的 stomp-broker 支持。插件提供三个关键的类:
类 | 说明 |
---|---|
StompBroker | 将 WebSocket 协议,转为 Stomp 协议;并提供 Broker 服务 |
StompEmitter | Stomp 消息发射器(用于发消息) |
ToHandlerStompListener | 将 Stomp 事件转为 Solon Handler 通用体系。从而实现控制器模式开发 |
2、使用示例
- 注册经理人
@ServerEndpoint("/chat")
public class ChatStompBroker extends StompBroker {
public ChatStompBroker(){
//转发到 Solon Handler 体系
this.addServerListener(new ToHandlerStompListener(getServerSender()));
//添加签权监听器(按需添加)
this.addServerListener(new ChatStompListenerImpl());
}
}
//签权演示(按需定制)
public class ChatStompListenerImpl extends SimpleStompListener {
@Override
public void onOpen(WebSocket socket) {
String user = socket.param("user");
if (user == null) {
socket.close();
}
}
}
- 业务场景应用(经典的 MVC 模式,与 http 请求差不多)
import org.noear.solon.annotation.Controller;
import org.noear.solon.annotation.Http;
import org.noear.solon.annotation.Mapping;
import org.noear.solon.annotation.Message;
import org.noear.solon.annotation.To;
@Controller
public class TestController {
@Inject //@Inject("/chat") 多经纪人时,指定名字
StompEmitter stompEmitter;
@Message
@Mapping("/hello")
@To("/topic/greetings")
public Greeting greeting(HelloMessage message) throws Exception {
Thread.sleep(1000); // simulated delay
return new Greeting("Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!");
}
@Message
@Mapping("/topic/greetings")
public Greeting greeting2(HelloMessage message) throws Exception {
Thread.sleep(1000); // simulated delay
//log.info ("Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!");
return new Greeting("Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!");
}
@Http
@Mapping("/hello2")
public void greeting3(Context ctx, HelloMessage message) throws Exception {
Thread.sleep(1000); // simulated delay
String payload = ctx.renderAndReturn(new Greeting("Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!"));
stompEmitter.sendTo("/topic/greetings", payload);
}
}
3、注解使用说明
Mapping 说明(当有路径匹配上时)
- 没有 “方式限定”(
@Http
、@Get
、@Message
..)时,@Mapping
表示匹配所有的请求。 - 添加
@Message
时,表示只匹配ctx.method() == 'MESSAGE'
的请求 - 添加
@Http
时,表示匹配ctx.method() == 'GET' | 'POST'..
等 Http 的上下文 - 可以添加多个 “方式限定” 注解
Message 说明
- 跟
@Get
之类的一样,表过请求方式限定
To 说明
- 表示处理结果,转发给另一个目标
更多,参考:《@Mapping 用法说明》
4、注解组合说明
组合示例 | 说明 |
---|---|
@Message @Mappinge("/demo") void fun() | 接收所有处理 |
@Message @Mappinge("/demo") String fun() | 接收所有处理,并将处理结果转发给来源地址 |
@Message @Mappinge("/demo") @To("/test") String fun() | 接收所有处理,并将处理结果转发给目标地址 |