亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【金秋打卡】第16天 RabbitMQ消息中間件極速入門與實戰 06

標簽:
Java

课程信息:

- 课程名称:RabbitMQ消息中间件极速入门与实战

- 章节名称:RabbitMQ整合SpringBoot2.x 消费端处理消息

- 讲师姓名:阿神


课程内容:

编写消费端的相关操作

 1.编写application.properties文件

# SpringBoot整合RabbitMQ的基本配置:
spring.rabbitmq.addresses=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/
spring.rabbitmq.connection-timeout=15000

# SpringBoot整合RabbitMQ的消费端配置:
spring.rabbitmq.listener.simple.concurrency=5
#签收模式:手工签收
spring.rabbitmq.listener.simple.acknowledge-mode=manual 
# 最大并发
spring.rabbitmq.listener.simple.max-concurrency=10
# 限流 同一时间只能有一条数据
spring.rabbitmq.listener.simple.prefetch=1
# ????
server.servlet.context-path=/
server.port=8002

2. 编写Order类

3. 编写OrderReceive类,这是实现消费者功能的主要类

@Component
public class OrderReceive {

    // 此注解当控制台中没有设置的exchange与Queue时,可自动创建
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = "order-queue", durable = "true"),
            exchange = @Exchange(value = "order-exchange", durable = "true", type = "topic"),
            key = "order.*"
    ))
    // 手工签收依赖于Channel
    // @RabbitHandler: 标识如果有消息过来,消费者要消费的时候调用此方法,没有监听绑定队列
    @RabbitHandler
    public void onOrderMessage(@Payload Order order, @Headers Map<String, Objects> headers, Channel channel) throws Exception{
        // 消费者操作
        System.out.println("---------收到消息,开始消费-----------");
        System.out.println("订单ID:" + order.getId());
//        Objects deliveryTag = headers.get(AmqpHeaders.DELIVERY_TAG);
        long l = Long.parseLong(Objects.toString(headers.get(AmqpHeaders.DELIVERY_TAG)));
        // 第一个参数:
        // 第二个参数:表示是否支持批量签收
        // 发送一个签收的响应
        channel.basicAck(l, false);
    }
}

4. 在producer发送一条消息,可直接在consumer接受一条消息,如下图

https://img4.sycdn.imooc.com/636b1ed900019fef08450282.jpg

5. 这里出现了一个小问题,这里的Long与Object转换的时候,我使用了toString()转化为String类型,在转化为Long类型,如下:

long l = Long.parseLong(headers.get(AmqpHeaders.DELIVERY_TAG).toString());

但这样写会出现一个错误,如下图:

https://img3.sycdn.imooc.com/636b1f5e0001e54316910456.jpg

这里改为这样,使用Object.toString()即可解决:

long l = Long.parseLong(Objects.toString(headers.get(AmqpHeaders.DELIVERY_TAG)));

学习心得:

本节课我学习了RabbitMQ消费者端的一些操作,对RabbitMQ有了一个更深的了解。

课程截图:

https://img2.sycdn.imooc.com/636b1e7d0001a25913060722.jpg

https://img1.sycdn.imooc.com/636b1e8e0001093c12580741.jpg


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消