This is an automated email from the ASF dual-hosted git repository.
wangxin pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo-website.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 8f91da5 [BLOG] How to use Fescar to ensure consistency between Dubbo
Microservices(CHS) (#253)
8f91da5 is described below
commit 8f91da5f108cc87bdda5ecb599aaa15ac2d2d48e
Author: jimin <[email protected]>
AuthorDate: Fri Jan 18 18:22:34 2019 +0800
[BLOG] How to use Fescar to ensure consistency between Dubbo
Microservices(CHS) (#253)
* add doc How to use Fescar to ensure consistency between Dubbo
Microservices
* add doc How to use Fescar to ensure consistency between Dubbo
Microservices
* Delete dubbo-fescar.html
* Delete dubbo-fescar.json
* revert blog.json index.html
* [BLOG] How to use Fescar to ensure consistency between Dubbo
Microservices(CHS)
---
blog/zh-cn/dubbo-fescar.md | 225 +++++++++++++++++++++++++++++++++++++++++++++
site_config/blog.js | 7 ++
2 files changed, 232 insertions(+)
diff --git a/blog/zh-cn/dubbo-fescar.md b/blog/zh-cn/dubbo-fescar.md
new file mode 100644
index 0000000..2d92b08
--- /dev/null
+++ b/blog/zh-cn/dubbo-fescar.md
@@ -0,0 +1,225 @@
+---
+title: 如何使用Fescar保证Dubbo微服务间的一致性
+keywords: Dubbo,Fescar,一致性
+description: 本文主要介绍如何使用Fescar保证Dubbo微服务间的一致性
+---
+# 如何使用Fescar保证Dubbo微服务间的一致性
+
+
+
+## 案例
+
+用户采购商品业务,整个业务包含3个微服务:
+
+- 库存服务: 扣减给定商品的库存数量。
+- 订单服务: 根据采购请求生成订单。
+- 账户服务: 用户账户金额扣减。
+
+### 业务结构图
+
+
+
+
+### StorageService
+
+```java
+public interface StorageService {
+
+ /**
+ * deduct storage count
+ */
+ void deduct(String commodityCode, int count);
+}
+```
+
+### OrderService
+
+```java
+public interface OrderService {
+
+ /**
+ * create order
+ */
+ Order create(String userId, String commodityCode, int orderCount);
+}
+```
+
+### AccountService
+
+```java
+public interface AccountService {
+
+ /**
+ * debit balance of user's account
+ */
+ void debit(String userId, int money);
+}
+```
+
+### 主要的业务逻辑:
+
+```java
+public class BusinessServiceImpl implements BusinessService {
+
+ private StorageService storageService;
+
+ private OrderService orderService;
+
+ /**
+ * purchase
+ */
+ public void purchase(String userId, String commodityCode, int orderCount) {
+
+ storageService.deduct(commodityCode, orderCount);
+
+ orderService.create(userId, commodityCode, orderCount);
+ }
+}
+```
+
+```java
+public class StorageServiceImpl implements StorageService {
+
+ private StorageDAO storageDAO;
+
+ @Override
+ public void deduct(String commodityCode, int count) {
+ Storage storage = new Storage();
+ storage.setCount(count);
+ storage.setCommodityCode(commodityCode);
+ storageDAO.update(storage);
+ }
+}
+```
+
+```java
+public class OrderServiceImpl implements OrderService {
+
+ private OrderDAO orderDAO;
+
+ private AccountService accountService;
+
+ public Order create(String userId, String commodityCode, int orderCount) {
+
+ int orderMoney = calculate(commodityCode, orderCount);
+
+ accountService.debit(userId, orderMoney);
+
+ Order order = new Order();
+ order.userId = userId;
+ order.commodityCode = commodityCode;
+ order.count = orderCount;
+ order.money = orderMoney;
+
+ return orderDAO.insert(order);
+ }
+}
+```
+
+## Fescar 分布式事务解决方案
+
+
+
+此处仅仅需要一行注解 `@GlobalTransactional` 写在业务发起方的方法上:
+
+```java
+
+ @GlobalTransactional
+ public void purchase(String userId, String commodityCode, int orderCount) {
+ ......
+ }
+```
+
+## Dubbo 与 Fescar 结合的例子
+
+### Step 1: 安装数据库
+
+- 要求: MySQL (InnoDB 存储引擎)。
+
+**提示:** 事实上例子中3个微服务需要3个独立的数据库,但为了方便我们使用同一物理库并配置3个逻辑连接串。
+
+更改以下xml文件中的数据库url、username和password
+
+dubbo-account-service.xml
+dubbo-order-service.xml
+dubbo-storage-service.xml
+
+```xml
+ <property name="url" value="jdbc:mysql://x.x.x.x:3306/xxx" />
+ <property name="username" value="xxx" />
+ <property name="password" value="xxx" />
+```
+### Step 2: 为 Fescar 创建 UNDO_LOG 表
+
+`UNDO_LOG` 此表用于 Fescar 的AT模式。
+
+```sql
+CREATE TABLE `undo_log` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `branch_id` bigint(20) NOT NULL,
+ `xid` varchar(100) NOT NULL,
+ `rollback_info` longblob NOT NULL,
+ `log_status` int(11) NOT NULL,
+ `log_created` datetime NOT NULL,
+ `log_modified` datetime NOT NULL,
+ `ext` varchar(100) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `idx_unionkey` (`xid`,`branch_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=159 DEFAULT CHARSET=utf8
+```
+
+### Step 3: 创建相关业务表
+
+```sql
+
+DROP TABLE IF EXISTS `storage_tbl`;
+CREATE TABLE `storage_tbl` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `commodity_code` varchar(255) DEFAULT NULL,
+ `count` int(11) DEFAULT 0,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY (`commodity_code`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+DROP TABLE IF EXISTS `order_tbl`;
+CREATE TABLE `order_tbl` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `user_id` varchar(255) DEFAULT NULL,
+ `commodity_code` varchar(255) DEFAULT NULL,
+ `count` int(11) DEFAULT 0,
+ `money` int(11) DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+DROP TABLE IF EXISTS `account_tbl`;
+CREATE TABLE `account_tbl` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `user_id` varchar(255) DEFAULT NULL,
+ `money` int(11) DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+```
+### Step 4: 启动 Fescar-Server 服务
+
+- 下载Server [package](https://github.com/alibaba/fescar/releases), 并解压。
+- 运行bin目录下的启动脚本。
+
+```shell
+sh fescar-server.sh $LISTEN_PORT $PATH_FOR_PERSISTENT_DATA
+
+e.g.
+
+sh fescar-server.sh 8091 /home/admin/fescar/data/
+```
+
+### Step 5: 运行例子
+
+- 启动账户服务
+- 启动库存服务
+- 启动订单服务
+- 运行BusinessService入口
+
+[相关代码](https://github.com/alibaba/fescar/tree/develop/examples/src/main/java/com/alibaba/fescar/tm/dubbo)
+[学习更多关于Fescar的内容](https://github.com/alibaba/fescar/)
\ No newline at end of file
diff --git a/site_config/blog.js b/site_config/blog.js
index b70bdb9..0e842f7 100644
--- a/site_config/blog.js
+++ b/site_config/blog.js
@@ -163,6 +163,13 @@ export default {
barText: '博客',
postsTitle: '所有文章',
list: [
+ {
+ title: '如何使用Fescar保证Dubbo微服务间的一致性',
+ author: '@slievrly',
+ dateStr: 'Jan 17th, 2019',
+ desc: '本文详细介绍了如何使用Fescar保证Dubbo微服务间的一致性',
+ link: '/zh-cn/blog/dubbo-fescar.html',
+ },
{
title: 'Dubbo 注解驱动',
author:'@mercyblitz',