微服务架构中的“发件箱模式”你知道吗?

基于微服务架构的异步消息通信模式 发件箱模式"基于消息队列的概念,用于解决微服务架构中的异步通信需求。它将消息发送方称为"发件人”,接收方称为"收件人"。在这种模式下,发件人将消息发送到一个中间件(如消息队列),而不是直接发送给收件人。收件人从中间件中获取消息并进行处理。"发件箱模式"的主要优势在于解耦,发件人和收件人之间不直接通信,而是通过消息队列进行协作。这使得系统中的各个服务可以独立进行扩展和部署,同时提高了可靠性和可伸缩性。“发件箱模式"是微服务架构中常用的异步通信模式。 阅读详情

前言

微服务架构如今非常的流行,这个架构下可能经常会遇到“双写”的场景。双写是指您的应用程序需要在两个不同的系统中更改数据的情况,比如它需要将数据存储在数据库中并向消息队列发送事件。您需要保证这两个操作都会成功。如果两个操作之一失败,您的系统可能会变得不一致。那针对这样的情况有什么好的方法或者设计保证呢?本文就和大家分享一个“发件箱模式”, 可以很好的避免此类问题。

下订单的例子

假设我们有一个 OrderService 类,它在创建新订单时被调用,此时它应该将订单实体保存在数据库中并向交付微服务发送一个事件,以便交付部门可以开始计划交付。

你的代码可能是下面这样子的:

@Service
public record OrderService(
    IDeliveryMessageQueueService deliveryMessageQueueService,
    IOrderRepository orderRepository,
    TransactionTemplate transactionTemplate) implements IOrderService {

    @Override
    public void create(int id, String description) {
        String message = buildMessage(id, description);

        transactionTemplate.executeWithoutResult(transactionStatus -> {
            // 保存订单
            orderRepository.save(id, description);
        });

        // 发送消息
        deliveryMessageQueueService.send(message);
    }

    private String buildMessage(int id, String description) {
    
Debezium系列之:发件箱事件路由器 阅读详情

相关推荐

outbox-pattern-mongodb:应用程序如何使用MongoDB通过发件箱模式创建“事务发件箱”

MongoDB中的发件箱模式 这是应用程序如何通过发件箱模式使用MongoDB创建transactional outbox的演示。 在生产中,我建议使用传统的消息代理/发布订阅服务(例如Kafka,RabbitMQ等),但是为了简单起见,我使用MongoDB的构建了该服务。 什么是发件箱模式? 发件箱模式用于保证对数据库的更新和事件的发送是原子发生的。 这是通过使用执行本地工作并将事件推送到发件箱集合中的本地事务来完成的。 然后,发件箱集合由不同的线程,进程或服务读取,以发出事件以流式传输。 这将保证至少一次传递语义。 感谢的图表 安装 首先安装您的需求(最佳实践是在虚拟环境中进行安装): pip install -r requirements.txt 将config.py mongodb-uri变量更改为您的mongodb实例。 我建议您使用 。 用法 在一个窗口中运行发件箱侦听

transactional-event:JEE的事务性事件库(发件箱模式)

Jakarta EE 8的事务性事件库 一个,为Jakarta EE 8实现了发件。 二手Jakarta EE API 需要以下API: CDI 2.0 并发实用工具1.0 JDBC 4.2 JTA 1.2 可选地支持以下API进行序列化: JAXB 2.2 JSON-B 1.0 发布活动 可以使用 API发布事件: @Inject private EventPublisher publisher; public void someMethod() { ... SomeEvent event = ... publisher . publish(event); ... } 处理事件 对于每个发布的事件类型,必须有一个对应的 (由限定): @Dependent @EventHandler clas

CAP:基于最终一致性的微服务中的分布式事务解决方案,也是具有发件箱模式的事件总线

CAP CAP是基于.Net标准的库,该库是处理分布式事务的解决方案,具有EventBus功能,它轻巧,易于使用且高效。 在构建SOA或MicroService系统的过程中,我们通常需要使用事件来集成每个服务。 在此过程中,简单使用消息队列并不能保证可靠性。 CAP采用与当前数据库集成的本地消息表程序来解决在分布式系统相互调用的过程中可能发生的异常。 它可以确保事件消息在任何情况下都不会丢失。 您也可以将CAP用作EventBus。 CAP提供了一种更简单的方法来实现事件发布和订阅。 在订阅和发送过程中,您不需要继承或实现任何接口。 架构概述 CAP实现了描述的发件箱模式。 入门 NuGet 可以使用以下命令在您的项目中安装CAP。 PM> Install-Package DotNetCore.CAP CAP支持RabbitMQ,Kafka,AzureService,Amazo

UE5 AI寻路全攻略:从Nav Mesh基础到动态障碍与多模式导航

在游戏开发中,AI寻路是赋予非玩家角色自主移动能力的关键技术。其核心原理是通过预计算或实时生成一个表示可行走区域的导航网格,AI路径查找算法(如A*)在此网格上规划最优路径。这项技术的价值在于,它能极大提升游戏世界的真实感和交互性,使NPC能够智能地绕开障碍、穿越复杂地形,广泛应用于开放世界、RPG、策略游戏等多种场景。本文聚焦于虚幻引擎5的寻路系统,深入探讨其寻路网格体配置。针对动态环境挑战,文章详细介绍了如何利用寻路修饰体积和动态障碍物组件实现导航网格的实时更新;同时,针对游泳、飞行等特殊移动需求,解析

weixin_33226816的博客 362

软件项目质量管理

识别项目中涉及质量管理的不同角色,如项目经理、质量经理、测试人员等,明确每个角色的职责和任务,包括负责哪些质量管理活动和决策。1、编制软件项目的质量管理计划,包括确定项目的质量标准和要求,以及制定质量控制和质量保证策略等。2、编制软件项目的质量管理计划,包括确定项目的质量标准和要求,以及制定质量控制和质量保证策略等。测试用例表是质量控制过程中的关键工具,确保所有功能和场景都被验证,减少项目中的缺陷。1、理解项目质量管理的基本过程,包括质量计划、质量保证、质量控制和质量改进;明确质量管理活动中的角色和职责。

weixin_51996255的博客 1260

一种基于改进YOLOv8并与ORB-SLAM3融合的动态环境密集点云同步定位与建图(SLAM)方法

文章提出了一种基于改进 YOLOv8 与 ORB-SLAM3 融合的动态环境稠密点云 SLAM 方法,通过引入GSConv 卷积模块和VoVGSCSP 特征融合模块优化 YOLOv8 的轻量性,结合实时目标检测与语义分割技术去除动态特征点,显著提升了动态场景下的位姿估计精度。

2401_87345388的博客 1942

【数据分析生命周期全揭秘】从零开始打造你的数据科学项目 | 最全指南

在当今数据驱动的世界中,数据科学正在颠覆传统行业,成为企业决策和价值创造的重要引擎。然而,如何科学、系统地开展一个数据分析项目?这是很多人关心的核心问题。本篇文章基于经典数据分析课程内容,深入解读数据分析生命周期的每个阶段,让你快速掌握从“发现问题”到“落地应用”的完整流程。如果你正在学习或准备从事数据分析领域,这篇文章一定会对你大有帮助!数据分析生命周期的六大阶段数据分析生命周期的六个阶段相辅相成,每个阶段都至关重要:发现问题:明确需求,提出假设。数据准备:清洗、转换和可视化数据。

AI手套的博客 1742

Reeds-Shepp曲线公式推导及代码实现-第三部分(共三部分)

根据原始起点的坐标和航向,将上一小节计算出来的局部进行整体的平移和旋转(与归一化的步骤刚好相反),最终得到全局路径的轨迹。根据计算出来的路径,选择路径最短的轨迹(也可根据我们实际的需要定制选优规则),作为最终的轨迹输出。Reeds-Shepp曲线公式推导及代码实现-第一部分(共三部分)Reeds-Shepp曲线公式推导及代码实现-第二部分(共三部分)的值进行等步长插值,得到每段轨迹对应的生成一系列插值距离列表。根据上一步生成的插值距离列表的值,计算其对应的局部位姿值。后,我们需要根据字段类型(

jianmo的博客 1089

YOLO26 实例分割技术:Mask 分支与特征融合

YOLO26实例分割技术研究摘要:本文提出了一种基于YOLO架构的高效实例分割方法,通过创新设计Mask分支和特征融合策略解决像素级分割精度、多尺度目标处理等挑战。系统采用共享Backbone提取特征,检测分支输出边界框和类别,Mask分支生成原型Mask和组合系数。核心创新包括:1)原型Mask生成与线性组合机制;2)检测与Mask特征共享;3)结合BCE和Dice的多任务损失函数。实验表明该方法在保持实时性的同时实现了高质量分割,为轻量级实例分割提供了新思路。

一键难忘的博客 250

5、自适应 RBF 神经网络控制方法解析

本文详细解析了基于RBF神经网络的多种自适应控制方法,包括针对函数未知、参数未知以及存在外部干扰的非线性系统的控制策略。通过李雅普诺夫稳定性理论设计自适应律,确保闭环系统稳定,并结合仿真示例和MATLAB代码实现,展示了方法的有效性。文章还对比了不同控制方法的适用场景,并给出了实际应用流程,为复杂系统控制提供了系统性解决方案。

ol789012的博客 75

手把手教你学simulink(31.31)--双向DCDC电源场景示例:设计并实现一个基于变频控制的双向降压变换

设计并实现一个基于 Simulink 的双向降压变换器,能够在充电模式(从高压侧向低压侧传输能量)和放电模式(从低压侧向高压侧传输能量)之间切换,确保输出电压稳定,并根据负载变化自动调整工作模式。

MHD0815的博客 344

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: 微服务又被泼“过去十年最大的架构错误”冷水了!
下一篇: 如何让你的架构设计应用做到高内聚、低耦合?
Java_LingFeng
博客等级 码龄4年 505粉丝 259原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值