zoukankan      html  css  js  c++  java
  • sping+redis实现消息队列的乱码问题

    使用spring支持redis实现消息队列,参考官方样例:https://spring.io/guides/gs/messaging-redis/

    实现后在运行过程中发现消费者在接收消息时会出现乱码的情况。经排查是由于序列化工具不同导致的。

    生产者的配置

      <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">  
            <property name="connectionFactory" ref="connectionFactory"/>  
            <!--     如果不配置Serializer,那么存储的时候只能使用String,如果用对象类型存储,那么会提示错误 can't cast to String!!!-->  
            <property name="keySerializer">  
                <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>  
            </property>  
            <property name="valueSerializer">  
                <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>  
            </property>  
            <!--开启事务-->  
            <property name="enableTransactionSupport" value="true"/>  
        </bean> 

    template默认是使用stringSerializer的,这里配置了JdkSerializationRedisSerializer来做一些对象的存储。

    这就导致了消费端接受消息时反序列化会出现问题,解决方法可以在消费者配置监听器中注入生产者使用的序列化工具。

    注意Serializer属性。

    <bean id="listener" class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">
               <constructor-arg index="0" ref= "receiver"/> 
               <constructor-arg index="1" value="receive" /> 
               <property name="serializer" >
                <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>  
                </property>
       </bean>
  • 相关阅读:
    Service Fabric 用 Powershell 部署应用到本地
    Redis 高可用之哨兵模式(二)
    Redis 高可用之哨兵模式
    微服务之Service Fabric 系列 (一):概览、环境安装
    Nginx 负载均衡
    Redis 总结
    微服务示例-Spring Cloud
    ASP.NET Core Linux 发布
    Windows RabbitMQ 安装
    Nancy 框架学习
  • 原文地址:https://www.cnblogs.com/tangyuanyuan/p/8331243.html
Copyright © 2011-2022 走看看