Чтобы изучить распределенную транзакцию Seata, достаточно этой статьи. Рекомендуется ее собрать.
Чтобы изучить распределенную транзакцию Seata, достаточно этой статьи. Рекомендуется ее собрать.

Чтобы узнать о распределенных транзакциях Seata, достаточно этой статьи.

1. Характеристики сделок

КИСЛОТНЫЕ свойства

  • A (Атомный): атомарность,Все операции, составляющие делаиз,Либо все выполнение завершено,Или не выполняйте их все,Невозможно добиться частичного успеха и частичной неудачи.
  • C (Последовательность): последовательность,существоватьделадо и после исполнения,Ограничения согласованности базы данных не нарушены. Например: Чжан Сан и Ли Си переводят 100 юаней.,До передачи и после передачи данные находятся в правильном состоянии. Это называется согласованностью.,Если Чжан Сан переведет 100 юаней,На счет Ли Си не было добавлено 100 юаней, поэтому произошла ошибка в данных.,Нет последовательности.
  • Я (Изоляция): изоляция,В базе данных обычно существует параллелизм.,Изоляция да означает, что выполнение двух дел одновременно не мешает друг другу.,Дела не могут видеть другие дела, выполняющие процессы из промежуточных состояний. Уровень изоляции Конфигурациядела позволяет избежать таких проблем, как грязное чтение и повторное чтение.
  • D (Долговечность): стойкость.,После завершения дел,Изменения данных будут сохранены в базе данных.,и не будет откачен.

2. Локальные транзакции и распределенные транзакции

  • Местные дела: одна и та же база данных и сервер называются локальными делами. существуют компьютерные системы, более издающиеся реляционной база данных для управления делами, для достижения этой цели используются характеристики самой базы данных, поэтому это называется базой данных дел. Поскольку приложение в основном полагается на реляционную базу данных для управления делами, а база данных обычно использует тот же сервер, что и существующее приложение. , так что на основереляционная база данныеиздела также известны как местные дела.
  • Распределенные дела: Распределенные делаобратитесь кделаизженьшеньи ВОЗ、Поддержка делаиз сервера、сервер ресурсов идела Менеджеры находятся по адресуРазличные распределенные системыизна разных узлах,И принадлежат разным приложениям,Распределенные дела требуют разрешения этих операций, иначе все получится.,Или все остальное не получится. По сути,Распределенные дела предназначены для обеспечения согласованности данных в различных базах данных.

Внедрение распределенных транзакций

Например: распределенная система разделяет систему приложений на несколько сервисов, которые могут быть развернуты независимо. Поэтому для выполнения транзакционных операций требуется удаленное сотрудничество между службами. Транзакции, выполняемые удаленно, осуществляются через сеть. Совместная работа называется распределенными транзакциями. Например, транзакции регистрации пользователей и бонусных баллов, транзакции создания заказов и сокращения запасов, транзакции банковских переводов и т. д. — все это распределенные транзакции.

Из приведенного выше рисунка мы видим, что на самом деле, если речь идет об использовании нескольких источников данных, могут возникнуть проблемы с транзакциями. Конечно, в реальной разработке мы должны стараться избегать возникновения таких проблем. избежать этого невозможно, нам нужно. Чтобы решить эту проблему, в архитектуре нашей микросервисной системы в настоящее время лучшим и наиболее распространенным решением является Seata.

3. Теоретические основы распределенных транзакций

С распространением межсетевых связей различные проекты постепенно переходят на распределенные услуги. В настоящее время микросервисы стали повсеместными, а локальные транзакции больше не могут соответствовать требованиям распределенных транзакций, поэтому возникла проблема распределенных транзакций. Распределенные транзакции известны как всемирная проблема. В настоящее время существуют две основные теоретические основы распределенных транзакций:

  • Закон ЕСП
  • БАЗОВАЯ теория

3.1. Закон о КАП.

Содержание этой теоремы относится к: В распределенной системе Consistency (согласованность), Availability (доступность) и Partitiontolerance (отказоустойчивость разделов) не могут быть достигнуты одновременно.

  • Консистенция (С)
  • Все данные в распределенной системе имеют резервную копию и существуют в одно и то же время. (Эквивалентно тому, что все узлы получают доступ к одной и той же последней копии данных)
  • Доступность(А)
  • После сбоя некоторых узлов в кластере может ли весь кластер по-прежнему отвечать на запросы клиентов на чтение и запись? (Высокая доступность обновлений данных)
  • Допуск разделения (P)
  • По реальному эффекту,Разделение эквивалентно лимиту времени связи Требовать. Если система не может обеспечить согласованность данных в течение установленного срока,,Это означает, что произошла ситуация с разделом.,Необходимо сделать выбор между нынешним существованием CиA

CAP не может существовать одновременно. Это иллюстрируется следующим примером.

  • Когда Служба инвентаризации сокращает запасы,Затем вам необходимо синхронизировать данные с другими сервисами.,Это да Для обеспечения согласованности данных C,Но сеть ненадежна,Итак, нашей системе необходимо обеспечить отказоустойчивость раздела P,Другими словами, мы должны терпеть некоторые проблемы, вызванные Интернетом.,На этот раз, если мы хотим вызвать C, то нам нужно отбросить A,То есть, в случае нашего существованиягарантироватьCiz,Вы должны отказаться от А,Другими словами, даCP не может быть высокодоступным.
  • Если для достижения А,В условиях высокой доступности,Другими словами, да должен ответить в течение ограниченного времени.,Также из-за ненадежной сети P,Заказать услугу может не получиться получить новые данные,Но да еще нужно отвечать пользователям,Тогда нет последовательности. Так что АПда не может обеспечить сильную последовательность из.
  • Если мы хотим создатьCA,То есть высокая доступность и согласованность,Другими словами, для достижения этой цели необходимо иметь хорошую сеть контактов.,Это означает, что нам нужно объединить ресурсы, заказы и пользователей.,Но эта ситуация также теряет силу P.,В настоящее время система больше не является распределенной системой.

Аннотация: В распределенной системе p неизбежно, поэтому мы можем выбирать только между C и A. При этом условии родилась теория BASE.

3.2. БАЗОВАЯ теория.

BASE — это аббревиатура трех фраз: «Базово доступный», «Мягкое состояние» и «В конечном итоге согласованный». Теория BASE является результатом компромисса между согласованностью и доступностью в CAP. Она основана на обобщении распределенных практик в крупномасштабных интернет-системах и постепенно развивается на основе теоремы CAP. Основная идея теории BASE заключается в следующем: даже если строгая согласованность не может быть достигнута, каждое приложение может использовать соответствующие методы в соответствии со своими бизнес-характеристиками для достижения окончательной согласованности системы.

  • В принципе доступен
  • В принципе доступности относится к моменту, когда в существующей распределенной системе происходит непредсказуемый сбой.,Допуск потери частичной доступности – примечание,Это ни в коем случае не означает недоступность системы. например:
  • (1) Потеря времени отклика. В обычных обстоятельствах,Существующей онлайн-поисковой системе необходимо возвращать пользователю соответствующие результаты запроса в течение 0,5 секунды.,Но из-за неисправности,Время ответа на результат запроса увеличено на 1–2 секунды.
  • (2) Потеря функции системы: при нормальных обстоятельствах.,существуют при покупках на сайте электронной коммерции руководить,Потребители могут беспрепятственно выполнить практически любой заказ.,Но досуществовать некоторые праздничные распродажи в периоды пика покупок из-за,Из-за резкого роста покупательского поведения потребителей,Чтобы защитить стабильность торговой системы,Некоторые потребители могут быть перенаправлены на страницу перехода на более раннюю версию.
  • мягкое состояние
  • Мягкое состояние относится к промежуточному состоянию, которое позволяет хранить данные в системе в существующем состоянии.,И считается, что промежуточное состояние «исторасуществовать» не повлияет на общую доступность системы.,То есть допускается задержка процесса синхронизации данных между разными узлами и копиями данных системы.
  • конечная согласованность
  • конечная согласованность подчеркивает, что все копии данных существуют и могут в конечном итоге достичь согласованного состояния после периода синхронизации. Поэтому конечная согласованность ESSENTIAL да требует, чтобы система обеспечивала согласованность окончательных данных,Без необходимости строгой согласованности системных данных в режиме реального времени.

Тогда мы все еще можем использовать пример, который мы только что использовали, чтобы проиллюстрировать эту позицию.

В основном доступны:гарантировать Основные услугида Можно использоватьиз,Что касается других услуг, время ответа может быть соответствующим образом сокращено.,Даже да понижение уровня обслуживания

Мягкое состояние:житьсуществоватьпромежуточное состояние,Не влияет на общее использование системы,Синхронизация данных задерживается.

Окончательная согласованность:После периода пикового трафика,По истечении некоторого времени синхронизации,Обеспечьте единообразие данных каждой службы.

4. Знакомство с Seata

4.1. Что такое Сиата?

Seata — это решение для распределенных транзакций с открытым исходным кодом, предназначенное для предоставления высокопроизводительных и простых в использовании услуг распределенных транзакций. Seata предоставит пользователям режимы транзакций AT, TCC, SAGA и XA, чтобы создать универсальное распределенное решение для пользователей.

В нашей микросервисной системе соответствующий бизнес разбит на независимые модули. На официальной схеме архитектуры мы видим, что на данный момент существует три сервиса:

  • Складские услуги: записывайте количество добавлений и удалений данного продукта.
  • Заказать услугу:в соответствии с Покупатель из Требования Создать заказ。
  • Услуги по учетным записям: списание остатков, баллов и т. д. со счетов пользователей.

существуют В этой структуре,Пользователи размещают заказы на приобретение товаров для бизнеса,Для завершения требуется три услуги,внутри каждого сервисаизданные一致性Зависит от本地делаПриходитьгарантировать,Но решения проблемы глобальной согласованности данных не существует.,У Seata есть решение этой проблемы.

4.2. Адрес официального сайта.

Документация Seata на китайском языке

https://seata.io/zh-cn/docs/overview/what-is-seata.html

4.3. Базовая архитектура Сиаты.

  • TC (Transaction Coordinator) - координатор дел поддерживает глобальный и отраслевой статус дел, вести; машина глобальных дел зафиксировать или откатить.
  • TM (Менеджер транзакций) — менеджер дел определяет глобальную область действия: запускать глобальные дела, фиксировать или откатывать глобальные дела;
  • RM (Resource Manager) - Менеджер ресурсов; управление ветками, дела, обработка ресурсов, чат TC для регистрации ветвей, отчет о состоянии ветвей и управление ими. машина ветка дела зафиксировать или откатить.

Примечание. Вышеупомянутый TC (Transaction Координатор) – координатор транзакций является сервером Seata-Server.

4.4. Решение для распределенных транзакций.

Seata предлагает четыре различных решения для распределенных транзакций:

  • Режим ХА: Сильная последовательность поэтапной модели дел,Пожертвуйте определенным удобством использования,Никакого вмешательства в бизнес。
  • Режим TCC: режим окончательного согласования и режим поэтапных дел,Происходит коммерческое вмешательство.
  • Режим AT: в конечном итоге соответствует режиму постановочных дел.,Никакого вмешательства в бизнес,такжедаSeataиз дефолтного режима
  • Режим SAGA: режим длинных дел,Происходит коммерческое вмешательство.
4.4.1. Режим Сеата-АТ.

Основные понятия:АТ-режимданенавязчивыйиз Распределенные деларешение,существовать АТ-режим Вниз,Пользователям нужно только сосредоточиться на себя из "Business SQL",пользователя из "Business SQL" первым этап,SeataРамочное совещаниеавтоматическийизгенерироватьделаизвторой этап фиксации и отката.

общий механизм

Эволюция протокола двухфазной фиксации:

  • первый этап: бизнес-данные и журнал отката существуют, представленные в одних и тех же местных делах.,Освободите локальные блокировки и ресурсы подключения.
  • второй этап: Асинхронный коммит, очень быстрый откат до первого; этапиз Отката журнала руководить анти-К компенсацией.

первый этап:существоватьпервый На этом этапе Seata перехватит «Бизнес-SQL», сначала проанализирует семантику SQL, найдет бизнес-данные, которые необходимо обновить, сохранит «отмену» перед обновлением существующих данных, а затем выполнит «Бизнес-SQL». QL» обновляет данные, снова сохраняет данные «повторно» после обновления и, наконец, генерирует блокировки строк. Эти операции выполняются в локальной базе данных, поэтому создаем первый этапизация.

второй этап:относительнопервый этап,второй Этап относительно простой, отвечает за общий откат и коммит, если он был ранее выполнен Если на этапе произошел сбой локального дела, будет выполнен глобальный откат. В противном случае будет выполнена глобальная фиксация. Если для отката используется «дапервый». этап Записыватьиз“undo Log», сгенерируйте SQL обратного обновления через записи отката и выполните его для завершения отката ветки. Разумеется, после завершения транзакции все ресурсы будут освобождены, а все логи будут удалены.

Иллюстрация

Примечание. Подробное описание использования режима AT см. в главах 5 и 6!

4.4.2, режим Seata-XA

В версии Seata 1.2.0 представлен новый режим транзакций: режим XA для поддержки протокола XA.

Проведем детальный анализ по трем аспектам:

  1. Что такое режим XA?
  2. Зачем поддерживать XA?
  3. Как реализовать режим XA,и как использовать?
4.4.2.1, режим XA

Для начала нам нужно понять, что такое XA?

Спецификация XA была предложена в начале 1990-х годов для решения задач в области распределенной обработки транзакций.

Примечание. Не существует механизма распределенных транзакций, который мог бы идеально адаптироваться ко всем сценариям и удовлетворить все потребности.

Независимо от того, будь то режим AT, режим TCC или режим Saga, предложение этих режимов по существу проистекает из неспособности спецификации XA удовлетворить потребности определенных сценариев.

Что такое протокол XA

Спецификация XA — это стандарт распределенной обработки транзакций (DTP, Distributed Transaction Processing), определенный организацией X/Open.

Спецификация XA описывает интерфейс между глобальным менеджером транзакций и локальным менеджером ресурсов. Цель спецификации XA — разрешить доступ к нескольким ресурсам (таким как базы данных, серверы приложений, очереди сообщений и т. д.) в одной транзакции, чтобы свойства ACID оставались действительными для всех приложений.

Спецификация XA использует двухфазную фиксацию (2PC), чтобы гарантировать, что все ресурсы одновременно фиксируют или откатывают любую конкретную транзакцию.

Спецификация XA была предложена в начале 1990-х годов. В настоящее время почти все основные базы данных поддерживают спецификацию XA.

Модель DTP определяет следующие роли:

  • АП: Приложение,Это можно понимать как использование программы распределенных дел DTP.
  • РМ: Менеджер ресурсов,Можно понимать как делаиз Участник.,Вообще говоря, да относится к экземпляру базы данных (MySql).,Управлять базой данных руководить через менеджер ресурсов,Менеджер ресурса контролирует дела филиала
  • ТМ: Менеджер дел,Отвечает за координацию и управление,Менеджер по делам контролирует глобальные дела,Жизненный цикл практики управления,и координировать свои действия с различными РМ. Глобальная делада относится к распределенной деладе в среде обработки.,Необходимость работы с несколькими базами данных для выполнения работы,Эта работа — глобальный проект.
  • Режим DTP определяет интерфейс связи между TMиRM, называемый XA.,Простое понимание обеспечивает протокол интерфейса из2PC для базы данных.,на на основе базы данных изXAпротокол для реализации из2PC, также известной как схема XA.

Объяснение случая:

  1. приложение(AP)держать Заказ Библиотекаитовар Библиотекадваданныеисточник。
  2. приложение(AP)проходитьTMуведомить Заказ Библиотека(RM)итовар Библиотека(RM),Заходите в Создать заказ, чтобы уменьшить запасы,РМ в настоящее время не отправлял дела,Товары в это времяи Заказблокировка ресурса。
  3. ТМполучить ответ на выполнение,Пока одна сторона терпит неудачу, другой RM отправит откат.,Откат завершен,Блокировка ресурса снята.
  4. ТМполучить ответ на выполнение,Все успешно,В это время Калл из РМ инициирует подачу дела,Отправка завершена,Блокировка ресурса снята.

Болевые точки протокола XA

Если ресурс, участвующий в глобальной транзакции, «потерян» (не может получить команду на завершение транзакции ветки), то данные, которые он блокирует, всегда будут заблокированы. Более того, это может даже привести к тупику.

Это основная проблема протокола XA, а также ключевая проблема, на которой Seata сосредоточится при внедрении режима XA.

Модель транзакции Seata

Seata определяет структуру глобальных транзакций.

Глобальная транзакция определяется как общая координация нескольких отраслевых транзакций:

  1. ТМ К Инициирование запроса ТС (Начало)、Совершить、Откат (Rollback) глобальных дел.
  2. TM Поставлено от имени глобальных дел XID Привязка к ветке дела.
  3. RM К TC Зарегистрируйтесь и привяжите филиал дела к XID Представляет мировые дела.
  4. RM О результатах выполнения отраслевых дел доложить ТК. (необязательный)
  5. TC отправляет команду фиксации ветки (Branch Commit) или отката ветки (Branch Rollback) в RM.

Глобальный процесс обработки транзакций Seata разделен на два этапа:

  • Этап исполнения :ветвь исполнениядела,игарантировать Результат выполнения удовлетворяет Можно откатить назадиз(Rollbackable) и Прочный
  • Стадия завершения: в соответствии с Этап исполнения Результатом является постановление и заявление принято. TM Проблема с глобальной фиксацией или откатом запроса на TC,TC Заказ RM водить машину ветвьдела руководить Commit или Rollback。

Так называемый режим транзакций Seata относится к режиму поведения транзакций филиалов, выполняемых в рамках глобальной структуры транзакций Seata. Точнее, его следует называть режимом транзакции филиала.

Разница между различными режимами транзакций заключается в том, что транзакции филиалов используют разные методы для достижения целей двух этапов глобальных транзакций. То есть ответьте на следующие два вопроса:

  • Этап исполнения : Как выполнить и гарантировать Результат выполнения удовлетворяет Можно откатить назадиз(Rollbackable) и Прочный
    • Стадия завершения: получать TC из Заказназад,Как это сделать Филиал изпредставлять на рассмотрениеилиоткат?

В качестве примера возьмем режим AT:

  • Этап исполнения:
    • Можно откатить назад:в соответствии с SQL Анализ результатов и запись журналов отката
    • Постоянство: журнал отката и бизнес SQL существуют те же местные дела, внесенные в базу данных
  • Стадия завершения:
    • Фиксация ветки: асинхронное удаление журнала отката
    • Откат ветки: Обновление компенсации на основе журнала отката
4.4.2.2 Режим XA Seata.

Режим ХА:

В рамках структуры распределенных транзакций, определенной Seata, модель транзакций использует ресурсы транзакций (базы данных, службы сообщений и т. д.) для поддержки протокола XA и использует механизм протокола XA для управления транзакциями филиалов.

  • Этап исполнения:
    • Можно откатить: бизнес SQL Операция проводится в XA В ветке руководить ресурсом XA протоколизподдерживать Приходитьгарантировать Можно откатить назад
    • Устойчивость: XA После завершения ветки выполните XA подготовка, аналогично, состоит из ресурсов XA протоколизподдерживать Приходитьгарантировать Выносливость(Прямо сейчас,Любые последующие аварии не приведут к невозможности отката)
  • Стадия завершения:
    • Фиксация ветки: выполнить XA Филиал из commit
    • Откат ветки: выполнить XA Филиал из rollback
Зачем поддерживать XA в Seata

Зачем добавлять режим XA в Seata? Какой смысл поддерживать XA?

По сути, Сиата Уже поддерживается 3 большойделамодель:AT、TCC、Saga Они все компенсаторные. из

Механизм обработки компенсирующих транзакций построен на ресурсах транзакций (либо на уровне промежуточного программного обеспечения, либо на уровне ресурсов транзакций). сам прав Распределенные делада Нет восприятияиз.

Существует фундаментальная проблема нечувствительности транзакционных ресурсов к распределенным транзакциям: невозможно достичь истинной глобальной согласованности.

Например, в процессе компенсационной транзакции количество записей о запасах сокращается со 100 до 50. В это время администратор склада подключается к базе данных, запрашивает статистическую инвентаризацию и видит текущие 50. Позже, если транзакция будет отменена из-за исключения, запасы будут компенсированы и откачены до 100. Очевидно, что 50 статистических данных, полученных по запросу администратора хранилища, являются грязными данными. Следовательно, существует промежуточное состояние в компенсирующих транзакциях (грязные данные могут быть прочитаны на полпути).

Значение XA

В отличие от компенсации, протокол XA требует, чтобы ресурс транзакции сам обеспечивал поддержку спецификации и протокола.

Поскольку ресурсы транзакций воспринимают распределенный процесс обработки транзакций и участвуют в нем, ресурсы транзакций (такие как базы данных) могут обеспечить эффективную изоляцию доступа к данным с любой точки зрения и обеспечить глобальную согласованность данных.

Например, в только что упомянутом сценарии обновления запасов XA Во время обработки транзакции инвентаризация данных промежуточного состояния 50 Зависит отданные Библиотекасамгарантировать,да Не знаю, как хранить Библиотекаадминистраториз Запросить статистику, чтобы просмотретьиз.

Помимо фундаментальной ценности глобальной согласованности, поддержка XA также имеет следующие преимущества:

  1. Никакого вмешательства в бизнес: и AT То же, ХА Модель будет ненавязчивой для бизнеса и не создаст дополнительной нагрузки на проектирование и разработку приложений.
  2. База данных широко поддерживается:
  3. Многоязычная поддержка проста: потому что она не требует SQL анализ, XA пара узоров Seata из RM из Требовать меньше.
  4. традиция, основанная на XA Применение миграции: традиционное из, на основе XA приложение «Протокол», перейти на Seata платформа, используйте XA Рисунок будет более плавным.
4.4.2.3 Применение режима XA в проектах.

получение кода

Официальный пример используется для демонстрации ниже:

официальное дело Внизнагрузкаадрес:https://github.com/seata/seata-samples.git

Здесь редактор сообщает вам адрес загрузки сетевого диска проекта:

Проект инициализации

Проект Seata-XA, в котором расположен корпус XA, показан на рисунке ниже:

Инициализация базы данных

Экспортируйте файл сценария базы данных all_in_one.sql в базу данных и измените соединение с базой данных файла конфигурации проекта application.properties.

Исходные данные:

Начать проект

После изменения файла конфигурации просто запустите указанные выше четыре основные службы соответственно.

тестирование кода

Посетите ссылку:

http://127.0.0.1:8084/purchase

После успешного вызова возвращается SUCCESS.

На данный момент данные следующие:

Примечание. Выше приведен обычный процесс бизнес-обработки. Ниже показана ситуация, когда возникает проблема с распределенной транзакцией и перезапускается служба заказов.

Восстановите данные в таблице в исходное состояние.,позвони еще разhttp://127.0.0.1:8084/purchase

В это время данные в таблице представления не изменяются, то есть вступает в силу приложение режима XA.

Официальное демонстрационное изображение корпуса:

Анализ случая:

Общий механизм работы:

Подвести итог

На современном этапе развития технологий не существует механизма распределенной обработки транзакций, который мог бы идеально удовлетворить потребности всех сценариев.

Ограничения проектирования системы во многих аспектах, таких как согласованность, надежность, простота использования, производительность и т. д., должны удовлетворяться различными механизмами обработки транзакций.

Основная ценность проекта Seata — создание стандартизированной платформы, которая комплексно решает проблемы распределенных транзакций.

На основе Seata архитектура приложений верхнего уровня может гибко выбирать подходящие решения для распределенных транзакций в зависимости от потребностей реальных сценариев.

Добавление режима XA заполняет пробел Seata в сценарии глобальной согласованности, формируя структуру из четырех основных режимов транзакций: AT, TCC, Saga и XA, которые в основном могут удовлетворить требования распределенной обработки транзакций всех сценариев.

4.4.2.4. Как перейти в режим XA.

Чтобы переключиться в режим XA, вам нужно всего лишь изменить агент источника данных на режим XA.

@Configuration public class StockXADataSourceConfiguration { @Bean @ConfigurationProperties(prefix = "spring.datasource") public DruidDataSource druidDataSource() { return new DruidDataSource(); } @Bean("dataSourceProxy") public DataSource dataSource(DruidDataSource druidDataSource) { // DataSourceProxy for AT mode // return new DataSourceProxy(druidDataSource); // DataSourceProxyXA for XA mode return new DataSourceProxyXA(druidDataSource); } @Bean("jdbcTemplate") public JdbcTemplate jdbcTemplate(DataSource dataSourceProxy) { return new JdbcTemplate(dataSourceProxy); } }

4.4.3, режим транзакции Seata-TCC
4.4.3.1. Что такое ТСС?

TCC — это протокол двухфазной фиксации в распределенных транзакциях. Его полное название — Try-Confirm-Cancel, что означает резервирование ресурсов (Try), операцию подтверждения (Confirm) и операцию отмены (Cancel). Их конкретное значение следующее:

  • Попробуйте: Проверьте и зарезервируйте бизнес-ресурсы.
  • Confirm:обработка бизнесаруководитьпредставлять на рассмотрение,Прямо сейчас commit операцию, пока Try Если это удалось, то шаг должен быть успешным.
  • Отмена: Отменить бизнес-обработку руководить,то есть операция отката,Этот шаг правильный Try Зарезервированный ресурс руководить освобожден.

TCC — это решение с интрузивными распределенными транзакциями. Вышеупомянутые три операции требуют реализации самой бизнес-системы. Это очень вмешательство в бизнес-систему, и ее конструкция относительно сложна. Однако преимущество состоит в том, что TCC вообще не полагается на базу данных. и может осуществлять трансграничные транзакции. Управление базами данных и ресурсами между приложениями реализует атомарную операцию посредством интрузивного кодирования для доступа к этим различным данным, что лучше решает проблемы распределенных транзакций в различных сложных бизнес-сценариях.

4.4.3.2 Режим TCC Seata.

Принцип режима Seata TCC такой же, как и в универсальном режиме TCC.

Разница между TCC и AT

AT Узор основан на Поддержка местных ACID дела из реляционная база данных

  • Первый этап подготавливает поведение: существование локальных дел, отправку обновлений бизнес-данных и соответствующих записей журнала отката.
  • Поведение второго этапа фиксации: Немедленное успешное завершение,автоматический Асинхронная пакетная очистка журналов отката.
  • поведение отката на втором этапе: путем отката журнала,автоматический Сгенерируйте операции компенсации для завершения отката данных.

соответствующий из,режим ТСС,Не полагается на базовые ресурсы данных, поддержка издела:

  • первый этап prepare Поведение: позвони Настроить из prepare логика.
  • второй этап commit Поведение: позвони Настроить из commit логика.
  • второй этап rollback Поведение: позвони Настроить из rollback логика.

так называемый TCC режим относится к поддержке Настроить из филиала дела включен в глобальное управление делаиз.

Функции

  • Более агрессивный,И вам необходимо самостоятельно реализовать соответствующую логику управления делами.
  • Во всем процессе практически нет блокировок, а производительность высокая.

Объясните подробно

Ссылка на вариант использования

https://seata.io/zh-cn/blog/integrate-seata-tcc-mode-with-spring-cloud.html

4.4.4, режим транзакции Seata-Saga

Официальный адрес документа

https://seata.io/zh-cn/docs/user/saga.html

4.4.4.1. Основные понятия.

Saga mode даSEATA предлагает решения для долгих дел,существоватьSagaмодельсередина,Каждый участник бизнес-процесса предоставляет локальную информацию,Если участник терпит неудачу, предыдущие успешные участники получают компенсацию.,первый этаптолько КServiceивторой этапCompensation Service (Произошла ошибка при выполнении обработки,Дайте шанс исправиться) все реализовано в рамках развития бизнеса.

Saga Режим распределенных дел обычно состоит из событий, ведущих машинаиз, да асинхронное выполнение между каждым участником, Сага Шаблон да Решение долгих дел.

4.4.4.2. Зачем нужна Сага?

Ранее мы узнали, что можно использовать все микросервисы, используемые в трех моделях распределенной работы Seata. соответствии сразвивать ВОЗизнуждатьсяруководить Исправлять,Но дасуществовать некоторые особые обстоятельства,Например, старая система,Закрытая система (не подлежит модификации),При этом нет распределенных делпредставлений),Тогда модели AT, XA и TCC будут недоступны.,Чтобы решить эту проблему,Только потом процитировал модель Саги.

Например: Участниками могут быть другие компании, службы или устаревшие системы.,Невозможно трансформироваться,Можно использовать режим Саги.

Saga mode даSeata предлагает решения для долгих дел,предоставилГетерогенная система разработала единую модель обработки。существоватьSagaмодельсередина,Все субпредприятия не участвуют непосредственно в общей обработке дел (несут ответственность только за обработку местных дел),И да, все это реализуется последним вызывающим абонентом.,И существованиеруководить общее время обработки бизнес-логики,существуют Когда есть проблемы с определенным подбизнесом,Тогда автоматическая компенсация прошла в полной мере успешно и другие участники,такпервый этапизтолько К сервис колливторой этапиз Обработка вознаграждения за обслуживание осуществляется в рамках общего развития бизнеса.

4.4.4.3, конечный автомат саги

В настоящее время режим Saga, предоставляемый Seata, может быть реализован только через механизм конечного автомата.,Разработчики обязаны вручную рисовать бизнес-процесс Saga,И конвертируйте его в файл JsonConfiguration.,Затем существуют, когда программа работает,Обработка бизнес-процессов и оплата услуг будут реализованы на основе документа субконфигурации.,И рисовать руководить Сагадиаграмма происходящимиз,Как правило, это необходимо реализовать через конечный автомат Saga.

Основные принципы:

  • Используйте диаграмму состояния, чтобы определить вызов службы из процесса и создать файл определения JSON.
  • В диаграмме изменения узел может вызвать службу, узел может компенсировать это узлу.
  • диаграмма состояний json Работает от привода двигателя государственной машины выполнение машины, когда возникает исключение, механизм состояний отменяет выполнение, и успешный узел, соответствующий узлу компенсации, откатывает дела.
  • Он может реализовать требования к оркестрации сервисов и поддерживать одиночный выбор, параллелизм, подпроцесс, преобразование параметров, сопоставление параметров, оценку статуса выполнения сервиса, захват исключений и другие функции.
4.4.4.4, конструктор конечных автоматов Saga

Для удобства пользователя Seata Saga предоставляет визуальный конструктор конечных автоматов. Код и руководство по эксплуатации см. по адресу:

https://github.com/seata/seata/tree/develop/saga/seata-saga-statemachine-designer

Демонстрационный адрес конструктора государственных автоматов

http://seata.io/saga_designer/index.html

Видеоурок по проектированию конечных автоматов

http://seata.io/saga_designer/vedio.html

4.5. Сравнение четырех режимов.

АТ-режим,да Мы обычно используем режим обработки,Также да использует большую часть из них.

XAиAT,ненавязчивыйиз,Чтобы переключиться между ними, вам нужно всего лишь изменить источник данных и прокси-объект.

TCC требует от нас вручную: Настроить, попробовать, подтвердить, отменить.

Сагада нацелен на старые проекты,Элементы не могут быть изменены,Решить распределенную проблему при вызове через внешнюю форму,Вся бизнес-логика разработана посредством государственной машины, руководимой в Saga.

5. Развертывание службы Seata TC.

5.1. Скачать сита-сервер.

Внизнагрузкаадрес:https://seata.io/zh-cn/blog/download.html

Если загрузка идет медленно, редактор поделился ссылкой для скачивания с сетевого диска здесь:

Связь:https://pan.baidu.com/s/1wtUb7tpGGYGoIE_h10kjvQ?pwd=yyds Код извлечения: yyds

Скачать версию издаSeataизseata-server-1.5.2 можно здесь.

5.2. Разархивируйте и измените конфигурацию.

После распаковки структура папок следующая:

Изменить файл конфигурации

Расположение файла конфигурации:

seata—>confОглавление—>файл application.yml

Полный файл конфигурации выглядит следующим образом:

server: port: 7091 spring: application: name: seata-server # Конфигурация журнала logging: config: classpath:logback-spring.xml file: path: ${user.home}/logs/seata # Внешний журнал отсутствует, поэтому следующую конфигурацию пока можно игнорировать. extend: logstash-appender: destination: 127.0.0.1:4560 kafka-appender: bootstrap-servers: 127.0.0.1:9092 topic: logback_to_logstash # Недавно добавленная консольная консоль, # Вы можете войти в систему, посетив http://localhost:7091, номер учетной записи выглядит следующим образом: seata/seata. console: user: username: seata password: seata seata: # Seata подключается к центру конфигурации Nacos config: # support: file, nacos, consul, apollo, zk, etcd3 type: nacos nacos: server-addr: 127.0.0.1:8848 namespace: 0fff12f9-61ef-4c65-b48a-70150001c547 group: SEATA_GROUP username: nacos password: nacos ##if use MSE Nacos with auth, mutex with username/password attribute #access-key: "" #secret-key: "" # Seata подключается к центру регистрации сервисов Nacos registry: # support: file, nacos, eureka, redis, zk, consul, etcd3, sofa type: nacos nacos: application: seata-server server-addr: 127.0.0.1:8848 group: SEATA_GROUP namespace: 0fff12f9-61ef-4c65-b48a-70150001c547 cluster: default username: nacos password: nacos ##if use MSE Nacos with auth, mutex with username/password attribute #access-key: "" #secret-key: "" # Здесь нет необходимости настраивать, поскольку конфигурация nacos подключена, следующие конфигурации, связанные с магазином, можно настроить непосредственно через SeataServer.properties. # store: # support: file 、 db 、 redis # mode: db # server: # service-port: 8091 #If not configured, the default is '${server.port} + 1000' security: secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017 tokenValidityInMilliseconds: 1800000 ignore: urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

Примечание. В нижней версии конфигурации есть два файла, а именно реестр.conf и файл.conf.

Например: версия seata-server-1.4.2, подробности о двух вышеупомянутых файлах здесь не будут представлены.

5.3. Инициализация конфигурации базы данных.

Создайте новую базу данных test_seata и импортируйте изmqsql.sql в каталог распаковки Seata script\server\db в test_seata.

После успешного импорта ситуация выглядит следующим образом:

5.4. Добавьте конфигурацию в центр конфигурации Nacos.

Нам нужно загрузить Seata из какой-то конфигурации в Nacos.,Конфигурация Более,Итак, чиновник предоставил нам config.txt.,Скачиваем и изменяем параметры,Загрузите в Накос.

Внизнагрузкаадрес:https://github.com/seata/seata/tree/develop/script/config-center

В основном измените следующее содержимое:

-- Модификация 1: Конфигурациядела группировка #Transaction routing rules configuration, only for the client service.vgroupMapping.dev_xxkfz_group=default #If you use a registry, you can ignore it service.default.grouplist=127.0.0.1:8091 -- Модификация 2: Режим хранения конфигурации — БД, информация о подключении к базе данных (из базы данных, инициализированной в версии 4.3) store.mode=db store.db.datasource=druid store.db.dbType=mysql store.db.driverClassName=com.mysql.jdbc.Driver store.db.url=jdbc:mysql://127.0.0.1:3306/test_seata?useUnicode=true&rewriteBatchedStatements=true store.db.user=xxkfz store.db.password=xxkfz

Примечание: группировка дел: используется для защиты компьютерного зала от отключения электроэнергии.,активировать запасную компьютерную комнату,или Удаленный компьютерный зал,механизм отказоустойчивости,Конечно, если Конфигурация Seata-Server соответствует группировке издела.,Клиенту также необходима Конфигурация той же группировки издела.

Конфигурациядела Группа: service.vgroupMapping.dev_xxkfz_group=default dev_xxkfz_group: должно соответствовать клиенту, пользователи могут Настроить. по умолчанию: должно соответствовать кластеру в клиентском application.yml.

После завершения вышеуказанных изменений поместите файл config.txt в каталог seata:

На данный момент нам нужно добавить эти конфигурации одну за другой в Конфигурацию Nacos.,Итак, нам нужен скрипт для выполнения,Официально предоставлено,Адрес загрузки:

https://github.com/seata/seata/tree/develop/script/config-center/nacos

Загрузите файл сценария изnacos-config.sh и также поместите его в каталог Seata.

Выполните скрипт для импорта:

sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t пространство имен -u nacos -w nacos

Описание параметра:

-h: хост, значение по умолчанию localhost

-p: порт, значение по умолчанию 8848.

-g: настроить группировку, по умолчанию — SEATA_GROUP.

-t: информация об арендаторе,Соответствует Nacosизпространство nameID,По умолчанию пусто

При этом внимание уделяется:

существуют при выполнении файла-скрипта naocs-config.sh из,По умолчанию он ищет config.txt по пути, а наш путь отличается.,Итак открываем файл naocs-config.sh руководить и вносим в него изменения,В противном случае оно не может быть выполнено.

Найдите соответствующую позицию ниже, измените и сохраните.

До модификации:

После модификации:

В приведенном выше случае редактор выполняет заказ на импорт следующим образом:

sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 0fff12f9-61ef-4c65-b48a-70150001c547 -u nacos -w nacos

Начните выполнение импорта:

5.5. Тестовый запуск службы TC.

После завершения вышеуказанной конфигурации,Можем запустить nacosиseata-server,На этом этапе мы проверяем центр настройки Nacosiz.,Вы увидите всю информацию о конфигурации, которую мы передали.

Войдите в каталог bin и дважды щелкните, чтобы запустить Seata-server.bat.

После успешного запуска,Доступ через браузерnacosадрес:http://127.0.0.1:8848/nacos/,Затем войдите на страницу списка услуг.,Вы можете видеть, что служба seata-server зарегистрирована на Nacos.

Импортируйте конфигурацию следующим образом:

Seata-сервер зарегистрирован в Nacos:

6. Интеграция проекта Seata

6.1. Бизнес-фон.

Пользователь покупает товаризбизнес-логика——>весьбизнес-логика Зависит от3Микросервисы обеспечивают поддержку:

  • Складские услуги (хранение-услуги): Вычтите количество на складе для данного товара.
  • Заказ-сервис: в соответствии с Требования к закупке Создать заказ。
  • Сервис аккаунта (аккаунт-сервис): Остаток списывается со счета пользователя.

6.2. Создание таблицы данных.

Создайте базу данных xxkfz_test и выполните следующий сценарий, чтобы создать таблицу.

  • t_order: таблица заказов
  • t_storage: таблица инвентаря
  • t_account: таблица аккаунтов
  • undo_log: undo_log,Используется для отката данных

УДАЛИТЬ ТАБЛИЦУ, ЕСЛИ СУЩЕСТВУЕТ `t_order`; СОЗДАТЬ ТАБЛИЦУ `t_order` ( `id` bigint(11) NOT NULL AUTO_INCREMENT, `user_id` bigint(20) ПО УМОЛЧАНИЮ NULL КОММЕНТАРИЙ 'userid', `product_id` bigint(11) ПО УМОЛЧАНИЮ NULL КОММЕНТАРИЙ 'product_id', `count` int(11) DEFAULT NULL COMMENT 'Количество', `money` decimal(11, 0) ПО УМОЛЧАНИЮ NULL COMMENT 'сумма', `status` int(1) DEFAULT NULL COMMENT 'Статус заказа: 0: Создание 1: Завершено', ПЕРВИЧНЫЙ КЛЮЧ (`id`) С ИСПОЛЬЗОВАНИЕМ BTREE ) ENGINE = InnoDB НАБОР СИМВОЛОВ = utf8 COLLATE = utf8_general_ci COMMENT = 'Таблица заказов' ROW_FORMAT = Dynamic; УДАЛИТЬ ТАБЛИЦУ, ЕСЛИ СУЩЕСТВУЕТ `t_storage`; СОЗДАТЬ ТАБЛИЦУ `t_storage` ( `id` bigint(11) NOT NULL AUTO_INCREMENT, `product_id` bigint(11) ПО УМОЛЧАНИЮ NULL КОММЕНТАРИЙ 'product_id', `total` int(11) DEFAULT NULL COMMENT 'Общий инвентарь', `used` int(11) DEFAULT NULL COMMENT 'использованный инвентарь', `residue` int(11) DEFAULT NULL COMMENT 'оставшийся инвентарь', ПЕРВИЧНЫЙ КЛЮЧ (`id`) С ИСПОЛЬЗОВАНИЕМ BTREE ) ENGINE = InnoDB НАБОР СИМВОЛОВ = utf8 COLLATE = utf8_general_ci КОММЕНТАРИЙ = «Инвентаризация» ROW_FORMAT = Dynamic; ВСТАВИТЬ В ЗНАЧЕНИЯ `t_storage` (1, 1, 100, 0, 100); СОЗДАТЬ ТАБЛИЦУ `t_account` ( `id` bigint(11) NOT NULL КОММЕНТАРИЙ 'id', `user_id` bigint(11) ПО УМОЛЧАНИЮ NULL КОММЕНТАРИЙ 'userid', `total` decimal(10, 0) DEFAULT NULL COMMENT 'общая сумма', `used` decimal(10, 0) DEFAULT NULL COMMENT 'использованный баланс', `residue` decimal(10, 0) DEFAULT NULL COMMENT 'оставшаяся доступная квота', ПЕРВИЧНЫЙ КЛЮЧ (`id`) С ИСПОЛЬЗОВАНИЕМ BTREE ) ENGINE = InnoDB НАБОР СИМВОЛОВ = utf8 COLLATE = utf8_general_ci COMMENT = 'Таблица учетных записей' ROW_FORMAT = Dynamic; ВСТАВИТЬ В ЗНАЧЕНИЯ `t_account` (1, 1, 1000, 0, 1000); -- Структура таблицы для undo_log -- Обратите внимание, что в версии 0.3.0+ сюда добавлен уникальный индекс ux_undo_log. ---------------------------- УДАЛИТЬ ТАБЛИЦУ, ЕСЛИ СУЩЕСТВУЕТ `undo_log`; СОЗДАТЬ ТАБЛИЦУ `undo_log` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `branch_id` bigint(20) НЕ НУЛЬ, `xid` varchar(100) НЕ НУЛЬ, `context` varchar(128) НЕ NULL, `rollback_info` longblob NOT NULL, `log_status` int(11) НЕ НУЛЬ, `log_created` дата-время НЕ NULL, `log_modified` дата-время НЕ NULL, ПЕРВИЧНЫЙ КЛЮЧ («id»), УНИКАЛЬНЫЙ КЛЮЧ `ux_undo_log` (`xid`,`branch_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 CHARSET ПО УМОЛЧАНИЮ=utf8;

6.3. Создайте базовые сервисы.

6.3.1 Базовая структура кода.

Базовый проект кода включает в себя три микросервиса:

  • Услуги по учету
  • Служба инвентаризации
  • Заказать услугу

Основная структура кода следующая:

6.3.2. Pom.xml представляет зависимости.

<dependency> <groupId>com.xxkfz.simplememory</groupId> <artifactId>xxkfz-service-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <!-- seata --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-seata</artifactId> </dependency> <dependency> <groupId>io.seata</groupId> <artifactId>seata-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>3.1.3</version> </dependency> <!-- Драйвер подключения MySql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- Druid пул соединений --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> </dependency> <!-- mybatis plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>

6.3.3. Файл конфигурации application.yml.

Примечание. Следующий файл конфигурации — Services. по учетуиз Конфигурация,Два других похожи,Здесь больше не отображается.

account-service ——> файл application.yml

server: port: 8090 spring: application: name: account-service cloud: nacos: discovery: # Группировка услуг group: SEATA_GROUP server-addr: http://localhost:8848 # требуется пространство именизID namespace: 0fff12f9-61ef-4c65-b48a-70150001c547 datasource: type: com.alibaba.druid.pool.DruidDataSource #Текущий тип операции источника данных driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/xxkfz_test?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false #useSSL усиление безопасности username: xxkfz password: xxkfz # MyBatis Плюс конфигурация mybatis-plus: # Конфигурацияmapperiz сканирует и находит все файлы сопоставления изmapper.xml. mapper-locations: classpath*:mapper/**/*.xml #Сканирование объекта, несколько пакетов, разделенных запятыми или точками с запятой typeAliasesPackage: com.xxkfz.simplememory.entity global-config: db-config: id-type: auto configuration: # Включите верблюжий регистр. После его включения, если имена полей базы данных и атрибутов объекта имеют одинаковые буквы, их можно распознать независимо от того, сколько подчеркиваний добавлено в середине. map-underscore-to-camel-case: true # Seata Конфигурация seata: application-id: seata-server # да Нет включения источника данных Beanавтоматический прокси enable-auto-data-source-proxy: false tx-service-group: dev_xxkfz_group # Должен совпадать с конфигурацией сервера. # Должен совпадать с конфигурацией сервера. registry: type: nacos nacos: # Nacos Адрес обслуживания server-addr: http://localhost:8848 group: SEATA_GROUP namespace: 0fff12f9-61ef-4c65-b48a-70150001c547 application: seata-server # Должен совпадать с конфигурацией сервера. username: nacos password: nacos cluster: default config: type: nacos nacos: server-addr: ${spring.cloud.nacos.discovery.server-addr} group: SEATA_GROUP namespace: 0fff12f9-61ef-4c65-b48a-70150001c547 service: vgroup-mapping: tx-service-group: dev_xxkfz_group # Должен совпадать с конфигурацией сервера. disable-global-transaction: false client: rm: # Сообщать ли о статусе успеха report-success-enable: true # Количество повторов report-retry-count: 5

6.3.4. Интерфейс создания заказа.

order-service ——> OrderController.java

@GetMapping("/order/create") public R<Order> createOrder(Order order) { orderService.create(order); return new R<>(200, «Заказ успешно создан!», order); }

логика обработки

order-service ——> OrderServiceImpl.java

public void createOrder(Order order) { // Создать заказ baseMapper.createOrder(order); // Инвентаризационные вычеты storageService.decrStorage(order.getProductId(), order.getCount()); log.info("----->Инвентаризационные вычетыCountЗаканчивать"); // Списание со счета accountService.decrAccount(order.getUserId(), order.getMoney()); }

6.3.5. Объявить интерфейс Feign.

Объявите интерфейсы хранилища и учетной записи.

@FeignClient(value = «служба хранения») общедоступный интерфейс StorageService { /** * вычет инвентаря * * @param идентификатор продукта * @param количество * @возвращаться */ @PostMapping(value = "/хранилище/уменьшение") R decrStorage(@RequestParam("productId") Длинный ProductId, @RequestParam("count") Целочисленное количество); }

@FeignClient(value = "account-service") public interface AccountService { /** * Списание со счета * * @param userId * @param money * @return */ @PostMapping(value = "/account/decrease") R decrAccount(@RequestParam("userId") Long userId, @RequestParam("money") BigDecimal money); }

6.3.6. Тестовая проверка.

Текущий пользователь userId = 1 из Счет1000,Запас 100,Имитировать покупку пользователем 1 продукта,Потратить 100,После делового звонка,Статус данных базы данных должен быть следующим:

  • Пользователь покупает товар и тратит 100. В этот момент баланс = 1000 - 100 = 900
  • Пользователь приобретает товар, а баланс товара = 100 - 1 = 99.

Проверьте обычный процесс заказа:

6.4. Используйте аннотацию глобальной транзакции Seata @GlobalTransactional.

Затем используйте аннотацию всех дел Seata @GlobalTransactional для имитации исключений и управления операциями отката.

Операция моделирования:

Модификация кода 1. Добавьте аннотацию @GlobalTransactional в существующий метод Создать заказcreateOrder.

Модификация кода 2. Имитация исключений в службе учетных записей.

6.5. Настройка прокси-сервера источника данных.

Так как Seata требует прокси для источника данных руководить,Добиться распределенного управления делами,Нам нужен источник данных, руководить Конфигурацией. Пример конфигурации выглядит следующим образом:

@Configuration public class DataSourceConfig { @Value("${mybatis-plus.mapper-locations}") private String mapperLocations; @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource druidDataSource(){ return new DruidDataSource(); } @Bean @Primary public DataSourceProxy dataSourceProxy(DataSource dataSource) { return new DataSourceProxy(dataSource); } @Bean public SqlSessionFactory sqlSessionFactoryBean(DataSourceProxy dataSourceProxy) throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSourceProxy); sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(mapperLocations)); sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory()); return sqlSessionFactoryBean.getObject(); } }

6.6. Запустить сервисный тест.

Перезапустите три службы соответственно и восстановите исходные данные таблицы базы данных.

Интерфейс доступа:

Обнаружено, что данные таблицы не изменились, а глобальный откат дел прошел успешно.

консоль Seata глобальные дела и ветка дела журнал отката

Отладка точки останова для просмотра сиденья и undo_log данныеизизменять

Точка останова и продолжение спуска,вызвать исключение,,Вставленные данные откатываются,И undo_log очищается,Откат распределенных дел - это нормально.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose