rocketmq结合webservice的实例分析

目录

 

流程图

​可运行的websock代码

websocket在接口中被调用。

springboot整合Rockmq

在websocket中调用MQ的producer


流程图


可运行的websock代码

收消息

    /**
     * 收到客户端消息后调用的方法
     *
     * @param message 客户端发送过来的消息*/
    @OnMessage
    public void onMessage(String message, Session session) throws IOException {
        log.info("收到来自窗口"+sid+"的叫号信息:"+message);
        //生产目标消息然后回调发送消息
        this.sendMessage("接收到"+message+"。    请访问接口"+"'"+"MessageToCaller"+"'"+"获取当前窗口的排队信息");
    }

发消息

    public static void sendInfo(String message,@PathParam("sid") String sid) throws IOException {
        log.info("推送消息到窗口"+sid+",推送内容:"+message);
        for (WebSocketServer item : webSocketSet) {
            try {
                //这里可以设定只推送给这个sid的,为null则全部推送
                if(sid==null) {
                    item.sendMessage(message);
                }else if(item.sid.equals(sid)){
                    item.sendMessage(message);
                }
            } catch (IOException e) {
                continue;
            }
        }
    }

D:\wsy\下载\websocket\springboot + netty + websocket\pxm6666-springboot-websocket-master\springboot-websocket

多人聊天、单人聊天

 

 

D:\wsy\下载\springboot整合\csdn下载的多人聊天和单人聊天\wbsocket

接收到客户端的json需要经过处理,目前可应答

D:\wsy\project\排队机\4.实现\code\v1.0\wbsocket_没有加生产者,可应答.zip

D:\wsy\下载\springboot整合\csdn下载的多人聊天和单人聊天\wbsocket_yuan   整合rocketmq

参考网址:

https://blog.csdn.net/qq_35387940/article/details/93483678

https://www.bilibili.com/video/av71654125?p=18  黑马rocket教程

websocket在接口中被调用。
 

@Controller
@RequestMapping("/checkcenter")
public class WebSocketController {
    //推送数据接口
    @ResponseBody
    @RequestMapping("/socket/push/{cid}")
    public String pushToWeb(@PathVariable String cid,String message) {
        try {
            WebSocketServer.sendInfo(message,cid);
        } catch (IOException e) {
            e.printStackTrace();
            return "failure";
        }
        return "success";
    }
}

评论:实际项目中,服务器和客户端交互,2种方案:
A:客户端访问接口,是访问接口的数据,接口的数据来自mq,就像是来自数据库一样的道理。
B: 服务器访问接口,把数据发送给客户端。为什么不直接发?为了系统中其他角色也能调用这个接口。就像是一个项目组中合作的成员,各自做自己的事情,有些资源需要共享

项目地址:

D:\wsy\下载\springboot整合\beyondli71-websocket-demo-master\websocket-demo

springboot整合Rockmq

消费者:

@Slf4j
@Component
@RocketMQMessageListener(topic = "springboot-mq",consumerGroup = "springboot-mq-consumer-1")
public class Consumer implements RocketMQListener<String> {

    @Override
    public void onMessage(String message) {
        log.info("Receive message:"+message);
    }

pom.xml

        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <version>${rocketmq-spring-boot-starter-version}</version>
        </dependency>

地址:D:\wsy\下载\黑马\RocketMQ\代码\springboot-rocketmq-consumer

生产者:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {MQSpringBootApplication.class})
public class ProducerTest {

    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    @Test
    public void test1(){
        rocketMQTemplate.convertAndSend("springboot-mq","hello springboot rocketmq");
    }
}

地址:D:\wsy\下载\黑马\RocketMQ1\代码\springboot-rocketmq-producer

在websocket中调用MQ的producer——sptingboot整合ms的项目

发消息

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage textMessage) throws Exception {
        Long uid = (Long) session.getAttributes().get("uid");
   
        JsonNode jsonNode = MAPPER.readTree(textMessage.getPayload());
        Long toId = jsonNode.get("toId").asLong();
       
                String msg = jsonNode.get("msg").asText();

        // 将消息保存到MongoDB
       // message = this.messageDAO.saveMessage(message);

        String msgJson = MAPPER.writeValueAsString(message);

        // 判断to用户是否在线
        WebSocketSession toSession = SESSIONS.get(toId);
        if (toSession != null && toSession.isOpen()) {
            //TODO 具体格式需要和前端对接
            toSession.sendMessage(new TextMessage("你好"));
            // 更新消息状态为已读
          //  this.messageDAO.updateMessageState(message.getId(), 2);
        }else{
            // 该用户可能下线,可能在其他的节点中,发送消息到MQ系统
            // 需求:添加tag,便于消费者对消息的筛选
           this.rocketMQTemplate.convertAndSend("haoke-im-send-message-topic:SEND_MSG", msgJson);
        }

    }

收消息

    @Override
    public void onMessage(String msg) {
        try {
            JsonNode jsonNode = MAPPER.readTree(msg);
            long toId = jsonNode.get("to").get("id").longValue();

            // 判断to用户是否在线
            WebSocketSession toSession = SESSIONS.get(toId);
            if (toSession != null && toSession.isOpen()) {
                //TODO 具体格式需要和前端对接
                toSession.sendMessage(new TextMessage(msg));
                // 更新消息状态为已读
              //  this.messageDAO.updateMessageState(new ObjectId(jsonNode.get("id").asText()), 2);
            }else{
                // 不需要做处理
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

地址:D:\wsy\下载\黑马—租房\新建文件夹(2)\day10-RocketMQ集群、分布式WebSocket实现以及地图找房功能实现\代码\itcast-haoke-im

其他项目保存到redis的数据,Ms推送到前端

地址:D:\wsy\下载\springboot整合\notice-master\notice

https://blog.csdn.net/wangbaishi_libi/article/details/79815706?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

MS项目,应用了定时器

但是报错404

项目是在springboot整合Mq的基础上整合了ms

代码:D:\wsy\project\排队机\4.实现\code\v1.0\springboot-rocketmq-producer_rocketmq

参考网址:https://blog.csdn.net/qq_35387940/article/details/93483678

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值