Redis发布订阅接收不到广播的消息的问题

其实问题很简单,我广播出去的时候是传输的对象

		//单节点实现方式,如果是单节点建议使用该方式,如果是分布式部署废弃该方式
	    Boolean sendFlag = webMessageHandler.sendMessageToUser(message);
	    if(!sendFlag) {//发送失败广播出去,让其他节点发送
	    	redisTemplate.convertAndSend(Constant.WEB_MESSAGE,message);
	    }

接收的时候也是对象接收的

	@Override
	public void receiveMessage(WSMessage message) {
		boolean flag = sendMessageToUser(message);
		if(flag) {
			logger.info("发送消息成功!");
		}
	}

但是这种序列化对象的传输就是接收不到参数,后来修改为JSON字符串传输

    Boolean sendFlag = webMessageHandler.sendMessageToUser(message);
	if(!sendFlag) {//发送失败广播出去,让其他节点发送    	    
       redisTemplate.convertAndSend(Constant.WEB_MESSAGE,JSONObject.toJSONString(message));
    }

接收采用字符串接收

	@Override
	public void receiveMessage(String message) {
		logger.info("开始发送消息!"+message);
		message = message.substring(1, message.length()-1);
		logger.info(message);
		message = message.replaceAll("\\\\", "");
		logger.info(message);
		boolean flag = sendMessageToUser(JSONObject.parseObject(message, WorkBenchMessage.class));
		logger.info("发送消息的结果"+flag);
		if(flag) {
			logger.info("发送消息成功!");
		}
	}

这里又遇到一个小坑,就是直接对message进行Object的转换的时候会报错,因为redis在处理json字符串的时候会自动加上转义字符。导致parseObject失败。这里的处理方式是去掉前后的""然后替换转义符号。

注意在替换转义的符号的需要使用"\\\\"替换一个"\"

message = message.replaceAll("\\\\", "");

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值