030-从零搭建微服务-消息队列(二)

这篇具有很好参考价值的文章主要介绍了030-从零搭建微服务-消息队列(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在最前

如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。

源码地址(后端):mingyue-springcloud-learning: 🎉 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心🎉 给出微服务的一些搭建建议

源码地址(前端):mingyue-springcloud-ui: 🎉 基于 Vue3 + TS + Vite + Element plus 等技术,适配 MingYue 后台微服务

文档地址:Wiki - Gitee.com

mingyue-common-mq

添加依赖

根据需要在 mingyue-common-mq 模块中添加所需的 MQ 中间件,例如:RocketMQ、Kafka。

<dependencies>
    <!-- RocketMQ -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
    </dependency>
​
    <!-- Kafka -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-stream-kafka</artifactId>
    </dependency>
</dependencies>

集成 RocketMQ

引入依赖

<!-- MQ工具 -->
<dependency>
    <groupId>com.csp.mingyue</groupId>
    <artifactId>mingyue-common-mq</artifactId>
</dependency>

Nacos 配置

spring:
  cloud:
    stream:
      function:
        # 重点配置 与 binding 名与消费者对应
        definition: rocketmqDemo
      rocketmq:
        binder:
            # rocketmq 地址
            name-server: 192.168.21.32:9876
        bindings:
            rocketmqDemo-out-0:
                producer:
                    # 必须得写
                    group: default
      bindings:
        rocketmqDemo-out-0:
            content-type: application/json
            destination: stream-rocketmq-demo-topic
            group: demo-group
            binder: rocketmq
        rocketmqDemo-in-0:
            content-type: application/json
            destination: stream-rocketmq-demo-topic
            group: demo-group
            binder: rocketmq

RocketMQ 生产者

@Component
public class RocketMqProducer {
​
    @Resource
    private StreamBridge streamBridge;
​
    public void rocketMqDemoMsg(String msg) {
        // 构建消息对象
        MqMessageDto messageDto = new MqMessageDto()
                .setMsgId(IdUtil.fastSimpleUUID())
                .setMsgText(msg);
​
        streamBridge.send("rocketmqDemo-out-0", MessageBuilder.withPayload(messageDto).build());
    }
​
}

RocketMQ 消费者

@Slf4j
@Component
public class RocketMqConsumer {
​
    @Bean
    Consumer<MqMessageDto> rocketmqDemo() {
        log.info("Rocket MQ 初始化订阅");
        return msg -> {
            log.info("通过 Rocket MQ 消费到消息 => {}", msg.toString());
        };
    }
​
}

推送消息到 RocketMQ

@GetMapping("/sendRocketMq")
@Operation(summary = "发送消息到RocketMQ", parameters = { @Parameter(name = "msg", description = "推送的消息体", required = true) })
public R<Void> sendRocketMq(String msg) {
    rocketMqProducer.rocketMqDemoMsg(msg);
    return R.ok();
}

集成 Kafka

引入依赖

<!-- MQ工具 -->
<dependency>
    <groupId>com.csp.mingyue</groupId>
    <artifactId>mingyue-common-mq</artifactId>
</dependency>

Nacos 配置

spring:
  cloud:
    stream:
      function:
        # 重点配置 与 binding 名与消费者对应
        definition: kafkaDemo
      kafka:
        binder:
            brokers: 192.168.21.32:9092
      bindings:
        kafkaDemo-out-0:
            destination: stream-kafka-demo-topic
            contentType: application/json
            group: demo-group
            binder: kafka
        kafkaDemo-in-0:
            destination: stream-kafka-demo-topic
            contentType: application/json
            group: demo-group
            binder: kafka

Kafka 生产者

@Component
public class KafkaProducer {
​
    @Resource
    private StreamBridge streamBridge;
​
    public void kafkaDemoMsg(String msg) {
        // 构建消息对象
        MqMessageDto messageDto = new MqMessageDto()
                .setMsgId(IdUtil.fastSimpleUUID())
                .setMsgText(msg);
​
        streamBridge.send("kafkaDemo-out-0", MessageBuilder.withPayload(messageDto).build());
    }
​
}

Kafka 消费者

@Slf4j
@Component
public class KafkaConsumer {
​
    @Bean
    Consumer<MqMessageDto> kafkaDemo() {
        log.info("Kafka 初始化订阅");
        return msg -> {
            log.info("通过 Kafka 消费到消息 => {}", msg.toString());
        };
    }
​
}

推送消息到 Kafka

@GetMapping("/sendKafka")
@Operation(summary = "发送消息到Kafka", parameters = { @Parameter(name = "msg", description = "推送的消息体", required = true) })
public R<Void> sendKafka(String msg) {
    kafkaProducer.kafkaDemoMsg(msg);
    return R.ok();
}

拓展 RabbitMQ

mingyue-common-mq 添加依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>

Nacos 配置

--- # rabbitmq 配置
spring:
  rabbitmq:
    host: rabbitmqIp
    port: 5672
    username: root
    password: root
  cloud:
    stream:
      function:
          # 重点配置 与 binding 名与消费者对应
          definition: rabbitmqDemo
      rabbit:
        bindings:
          rabbitmqDemo-in-0:
            consumer:
              delayedExchange: true
          rabbitmqDemo-out-0:
            producer:
              delayedExchange: true
      bindings:
        rabbitmqDemo-in-0:
          destination: delay.exchange.demo
          content-type: application/json
          group: delay-group
          binder: rabbit
        rabbitmqDemo-out-0:
          destination: delay.exchange.demo
          content-type: application/json
          group: delay-group
          binder: rabbit

小结

MQ 基础搭建已经完成,后续会编写一些实际开发中使用到队列的场景,如:

  1. 订单处理:

    • 电子商务平台可以使用消息队列来处理订单,确保订单的创建、支付、发货和通知等各个步骤都能按顺序和可靠地执行。

  2. 通知和提醒:

    • 网站或应用程序可以使用消息队列来发送通知和提醒,如电子邮件通知、短信通知、推送通知等,以便与用户互动。

  3. 用户注册和身份验证:

    • 当用户注册或请求密码重置时,消息队列可以用于生成和发送验证链接或令牌,确保用户身份验证的安全性和可扩展性。

  4. 数据同步:

    • 在多个系统之间同步数据,以确保数据的一致性,例如将用户配置信息从一个微服务同步到另一个微服务。

  5. 事件日志和审计:

    • 记录应用程序事件、用户活动和系统操作,以进行审计、监视和故障排除。

  6. 批量处理:

    • 处理大量数据导入、数据清洗、ETL(提取、转换、加载)操作等批处理任务,以提高性能和可维护性。

  7. 异步任务处理:

    • 处理后台任务,如图像处理、视频编码、生成报告等,以减少响应时间和提高系统的吞吐量。

  8. 队列服务:

    • 提供队列服务以支持其他应用程序或团队的异步通信需求,例如云服务提供商的消息队列服务。

  9. 数据分发:

    • 将数据从生产者分发给多个消费者,以实现发布-订阅模式,例如新闻订阅、市场报价和天气预报。

  10. 错误处理和重试:

    • 处理意外错误和故障,将失败的操作或任务放入队列,以便进行重试或错误处理。

这些业务使用场景只是消息队列的一些示例。消息队列有助于提高系统的可扩展性、弹性和可靠性,允许异步处理和解耦合组件,从而改善了应用程序的整体性能和用户体验。不同的业务需求可能需要不同类型的消息队列系统和配置。文章来源地址https://www.toymoban.com/news/detail-729417.html

到了这里,关于030-从零搭建微服务-消息队列(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 字节跳动新一代云原生消息队列实践

    作者:火山引擎云原生计算研发工程师|雷丽媛 上文我们了解了在字节跳动内部业务快速增长的推动下,经典消息队列 Kafka 的劣势开始逐渐暴露,在弹性、规模、成本及运维方面都无法满足业务需求。因此字节消息队列团队研发了计算存储分离的 云原生 消息引擎 BMQ ,在极

    2024年02月20日
    浏览(65)
  • 分布式消息队列RabbitMQ-Linux下服务搭建,面试完腾讯我才发现这些知识点竟然没掌握全

    vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app 5.修改配置文件 这里面修改{loopback_users, [“guest”]}改为{loopback_users, []} {application, rabbit, %% - - erlang - - [{description, “RabbitMQ”}, {id, “RabbitMQ”}, {vsn, “3.6.5”}, {modules, [‘background_gc’,‘delegate’,‘delegate_sup’,‘dtree’,‘file_han

    2024年04月14日
    浏览(54)
  • 从零手搓一个【消息队列】创建核心类, 数据库设计与实现

    创建 Spring Boot 项目, Spring Boot 2 系列版本, Java 8 , 引入 MyBatis, Lombok 依赖 提示:是正在努力进步的小菜鸟一只,如有大佬发现文章欠佳之处欢迎批评指点~ 废话不多说,直接上干货! 整体目录结构 : 本文主要实现 server 包 上篇文章 分析了项目需求, 介绍了项目中重要的核心概念

    2024年02月07日
    浏览(45)
  • 【云原生 | 27】Docker部署运行开源消息队列实现RabbitMQ

    作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道第一名🏅 阿里云ACE认证高级工程师🏅 ✒️个人主页:小鹏linux 💊个人社区:小鹏linux(个人社区)欢迎您的加入! 目录 1. 关于MQ 1.1 什么是MQ? 1.2 MQ是干什么用的?  1.3 MQ衡量标准  1.4 主流竞品分析  2. 关

    2024年01月20日
    浏览(46)
  • rocketMq消息队列原生api使用以及rocketMq整合springboot

    使用RocketMQ的原生API开发是最简单也是目前看来最牢靠的方式。这里用SpringBoot来搭建一系列消息生产者和消息消费者,来访问之前搭建的RocketMQ集群。 首先创建一个基于Maven的SpringBoot工程,引入如下依赖: RocketMQ的官网上有很多经典的测试代码,这些代码虽然依赖的版本比较

    2024年02月12日
    浏览(46)
  • 架构核心技术之分布式消息队列

    Java全能学习+面试指南:https://javaxiaobear.cn 今天我们来学习分布式消息队列,分布式消息队列的知识结构如下图。 主要介绍以下内容: 同步架构和异步架构的区别。异步架构的主要组成部分:消息生产者、消息消费者、分布式消息队列。异步架构的两种主要模型:点对点模型

    2024年02月07日
    浏览(41)
  • 架构师的36项修炼-03架构核心技术之分布式消息队列

    本课时的主题是分布式消息队列,分布式消息队列的知识结构如下图。 本课时主要介绍以下内容。 同步架构和异步架构的区别。异步架构的主要组成部分:消息生产者、消息消费者、分布式消息队列。异步架构的两种主要模型:点对点模型和发布订阅模型。 分布式消息队列

    2024年01月24日
    浏览(38)
  • 【Spring云原生系列】Spring RabbitMQ:异步处理机制的基础--消息队列 原理讲解+使用教程

    🎉🎉 欢迎光临,终于等到你啦 🎉🎉 🏅我是 苏泽 ,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏 《Spring 狂野之旅:从入门到入魔》 🚀 本专栏带你从Spring入门到入魔   这是苏泽的个人主页可以看到我其他的内容哦👇👇 努力的苏泽 http://suzee.blog.

    2024年03月15日
    浏览(51)
  • 32个Java面试必考点-09(上)消息队列Kafka架构与原理

    本课时主要讲解消息队列与数据库相关的知识,重点讲解三部分知识点: 1.Kafka 的架构与消息交互流程; 2.数据库事务的 4 大特性和分类; 3.MySQL 相关的内容,比如索引、MySQL 调优等。 消息队列与数据库知识点 先来看看相关知识点汇总,如下图。首先为了防止歧义进行说明

    2024年02月20日
    浏览(40)
  • 分布式 - 消息队列Kafka:Kafka生产者架构和配置参数

    生产者发送消息流程参考图1: 先从创建一个ProducerRecord对象开始,其中需要包含目标主题和要发送的内容。另外,还可以指定键、分区、时间戳或标头。在发送ProducerRecord对象时,生产者需要先把键和值对象序列化成字节数组,这样才能在网络上传输。 接下来,如果没有显式

    2024年02月13日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包