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>
  • 相关阅读:
    C#移动及改变控件大小
    flutter学习(状态组件,组件)
    dart学习1
    rn的优化
    git命令
    Immutable
    树形数据结构的搜索功能
    promise
    js出场率极高的代码
    js浮点数计算精度解决方案
  • 原文地址:https://www.cnblogs.com/tangyuanyuan/p/8331243.html
Copyright © 2011-2022 走看看