| description | OkHttps WebSocket Stomp OkHttp |
|---|
项目 OkHttps Stomp 基于 OkHttps 的 WebSocket 功能实现了一个非常轻量的 Stomp 客户端协议,它可以让你轻松实现 广播发布与订阅 和 队列发布与订阅 的客户端功能。
要开启 Stomp 功能,需要添加以下依赖:
<dependency>
<groupId>com.ejlchina</groupId>
<artifactId>okhttps-stomp</artifactId>
<version>1.0.1</version>
</dependency>implementation 'com.ejlchina:okhttps-stomp:1.0.1'类Stomp提供静态方法over来构建Stomp实例:
over(WebSocketTask task)基于 OkHttps 的 WebSocket 构建一个 Stomp 实例,并自动确认消息over(WebSocketTask task, boolean autoAck)构建一个 Stomp 实例,并可指定是否自动确认消息
例如:
// 使用一个 Websocket 连接构建一个 Stomp 实例,同时设置心跳间隔为 20 秒
Stomp stomp = Stomp.over(OkHttps.webSocket("wss://...").heatbeat(20, 20));以上代码构建了一个简单的 Stomp 客户端,并默认在收到消息时会自动确认,如果需要收到确认,可以使用下面的方式:
Stomp stomp = Stomp.over(
OkHttps.webSocket("wss://...").heatbeat(20, 20),
false // 参数设置 autoAck 为 false,将需要手动确认消息
);得到一个Stomp实例后,可使用以下两个方法连接 Stomp 服务器:
connect()直接连接 Stomp 服务器connect(List<Header> headers)携带一些 Stomp 头信息连接 Stomp 服务器
例如:
stomp.connect();如果服务器在连接时需要指令一些额外信息,比如连接 RabbitMQ 时需要指定login、passcode 和 vhost:
List<Header> headers = new ArrayList<>();
headers.add(new Header("login", "username"));
headers.add(new Header("passcode", "xxxxxxx"));
headers.add(new Header("host", "your_vhost"));
stomp.connect(headers);Stomp.over(OkHttps.webSocket("wss://...").heatbeat(20, 20))
.setOnConnected(stomp -> {
// 服务器连接成功回调
})
.setOnDisconnected(close -> {
// 连接已断开回调
})
.connect();stomp.topic("/your-topic", (Message msg) -> {
// 得到消息负载
String payload = msg.getPayload();
// 如果需要手动确认消息,调用此方法确认
stomp.ack(msg)
});stomp.untopic("/your-topic");stomp.queue("/your-queue", (Message msg) -> {
// 得到消息负载
String payload = msg.getPayload();
// 如果需要手动确认消息,调用此方法确认
stomp.ack(msg)
});stomp.unqueue("/your-queue");// 发送到广播
stomp.sendTo("/topic/your-topic", "Hello World");
// 发送到队列
stomp.sendTo("/queue/your-queue", "Hello World");stomp.disconnect();