• 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>
  • 相关阅读:
    Notes of Daily Scrum Meeting(12.22)
    一个合格的程序员应该读过哪些书
    snprintf vs sprintf
    Centos 关闭图形界面
    oracle selinux 问题
    struct 和typedef struct的区别
    c语言字符串函数
    504. Base 7
    汉诺塔python实现
    VIM字符编码基础知识
  • 原文地址:https://www.cnblogs.com/tangyuanyuan/p/8331243.html
Copyright © 2020-2023  润新知