有关RabbitMQ使用经历

今天在项目中使用RabbitMQ的时候,由于是在老项目中新引入MQ,所以遇到了一些问题,于是把这次使用经历记录下来。
因为项目比较老,查看spring版本居然是3.2.3版本,可以说相当老了,按照网上的帖子添加有关RabbitMq的依赖时就遇到一个问题:

版本不兼容问题

错误信息:

org/springframework/util/backoff/BackOff的错误

这个错误便是因为引入的RabbitMQ的版本太高,与spring不匹配,所以在这里要修改RabbitMQ的版本

			<!--rabbitmq依赖 -->
			<dependency>
				<groupId>org.springframework.amqp</groupId>
				<artifactId>spring-rabbit</artifactId>
				<version>1.3.5.RELEASE</version>
			</dependency>

添加了依赖之后,需要编写Spring-rabbitMQ的整合的配置文件:

<!-- Apollo 配置中心 这部分配置Apollo参数 -->
<apollo:config namespaces="xxx-center" order="-99999"/>	
<!-- 连接服务配置   配置连接RabbitMQ的地址端口账号密码等信息-->
<rabbit:connection-factory id="connectionFactory"
       host="${mq.host}" port="${mq.port}" username="${mq.username}" password="${mq.password}" /><rabbit:admin connection-factory="connectionFactory"/>
<!-- 定义template start -->
<rabbit:template id="commonRabbitMqTemplate" connection-factory="connectionFactory" exchange="xxxcenter.direct.exchange"
                 message-converter="jackson2JsonMessageConverter"/>
<!-- 定义template end -->
<!-- 定义queue start -->
<rabbit:queue name="${mq.queuename}"/>
   <!--direct-exchange部分如果只是作为消费者端,不必要进行配置,注释掉即可 -->
   <rabbit:direct-exchange name="xxxcenter.direct.exchange">
    <rabbit:bindings>
        <rabbit:binding queue="${mq.queuename}" key="itemUpDownKey"/>
    </rabbit:bindings>
</rabbit:direct-exchange>
<!-- 定义监听容器 start -->
<rabbit:listener-container connection-factory="connectionFactory" concurrency="10" prefetch="5">
    <rabbit:listener queue-names="${mq.queuename}" ref="xxxListener" />
</rabbit:listener-container>
<!-- 声明bean对象 -->
<bean id="jackson2JsonMessageConverter"
      class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" />
<bean id="xxxListener" class="cn.xxxbcenter.service.listener.XXXListener"></bean>

完成了xml文件的编写,此处要注意把配置文件添加到项目启动配置中,一般这个文件放在resource文件夹下,而resource文件夹一般在项目搭建时便被整个都引入,用作配置文件。
配置好之后,进入RabbitMQ的使用,以消费者为例,在消费时要获取队列连接,来拉取消息进行消费,由于这里使用监听器进行消费消息,所以直接编写监听器,监听器要实现MessageListener接口,重写其包含的onMessage方法,使用message.getBody方法来获取消息体。
在这里插入图片描述
在这里插入图片描述
这里加一个事务的注解是因为下面有对数据库的操作,为了保证一致性,借助事务来进行管理,消息体获得后是一个String类型的数据,并无法直接操作(因为一般生产者会把DTO直接发送),所以要将数据进行转换,这里借助反射的原理,编写了一个方法:
在这里插入图片描述
通过以上方法,便可以将数据转换为DTO对象,最后就是消息的处理工作了。
在开发中规范使用log日志打印,可以准确定位问题所在

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值