基于消息队列、spring boot、websocket实现的消息推送模型

话不多少,先上结构示意图。

业务需求:

消息发送服务可向消息队列发送消息,消息分发系统通过监听消息队列,使用websocket与客户机连接,当消息发送发送消息,消息分发系统可根据消息指定的目的地分发给指定用户。

使用SpringBoot、RabbitMQ、MyBatis、WebSocket技术。

感兴趣可上 http://devicecontrol.cn 体验系统,使用账号密码都用admin登录进行发送消息与账号添加,使用其他账户登录进行消息接收。

源码下载地址:https://download.csdn.net/download/u011626960/11165425

欢迎讨论。

 

 

 

好的,我可以为你介绍一下使用RabbitMQSpring BootWebSocket实现实时推送的方法。 首先,我们需要引入以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 接着,我们需要配置RabbitMQ: ```yml spring: rabbitmq: host: localhost port: 5672 username: guest password: guest ``` 然后,我们需要创建一个RabbitMQ的配置类: ```java @Configuration public class RabbitMQConfig { public static final String QUEUE_NAME = "user-online-queue"; public static final String EXCHANGE_NAME = "user-online-exchange"; public static final String ROUTING_KEY = "user-online-routing-key"; @Bean public Queue queue() { return new Queue(QUEUE_NAME, true); } @Bean public DirectExchange exchange() { return new DirectExchange(EXCHANGE_NAME); } @Bean public Binding binding(Queue queue, DirectExchange exchange) { return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY); } } ``` 这里创建了一个队列、一个交换机和一个绑定关系。 接着,我们需要创建一个WebSocket处理器: ```java @Component public class WebSocketHandler extends TextWebSocketHandler { private final SimpMessagingTemplate messagingTemplate; public WebSocketHandler(SimpMessagingTemplate messagingTemplate) { this.messagingTemplate = messagingTemplate; } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { // 处理客户端发送的消息 } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { // 处理客户端断开连接的事件 } @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { // 处理客户端连接成功的事件 } public void sendMessageToAll(String message) { messagingTemplate.convertAndSend("/topic/notification", message); } public void sendUserListToAll(List<String> users) { messagingTemplate.convertAndSend("/topic/userList", users); } } ``` 这里使用了Spring Boot的SimpMessagingTemplate来发送WebSocket消息。 最后,我们需要在控制器中使用RabbitMQ来通知WebSocket处理器: ```java @RestController public class UserController { private final WebSocketHandler webSocketHandler; private final RabbitTemplate rabbitTemplate; public UserController(WebSocketHandler webSocketHandler, RabbitTemplate rabbitTemplate) { this.webSocketHandler = webSocketHandler; this.rabbitTemplate = rabbitTemplate; } @PostMapping("/user/login") public void login(@RequestParam String username) { // 处理用户登录的逻辑 // ... // 发送用户在线通知 rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, RabbitMQConfig.ROUTING_KEY, username); // 推送当前在线用户列表 List<String> userList = // 获取当前在线用户列表 webSocketHandler.sendUserListToAll(userList); } @PostMapping("/user/logout") public void logout(@RequestParam String username) { // 处理用户退出的逻辑 // ... // 推送当前在线用户列表 List<String> userList = // 获取当前在线用户列表 webSocketHandler.sendUserListToAll(userList); } @RabbitListener(queues = RabbitMQConfig.QUEUE_NAME) public void handleUserOnline(String username) { // 推送用户在线通知 webSocketHandler.sendMessageToAll(username + " 上线了"); } } ``` 这里使用了RabbitListener注解来监听RabbitMQ队列,当有新的消息时,会调用handleUserOnline方法来通知WebSocket处理器。 以上就是利用RabbitMQ发送消息通知,使用Spring BootWebSocket实现实时推送在线用户列表和实现实时推送通知信息的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值