当前位置: 首页 > news >正文

沈阳做网站推广免费seo推广公司

沈阳做网站推广,免费seo推广公司,一个好的网站建设需要多少钱,软件开发分为哪几个步骤Seata 是什么 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 一、示例架构说明 可在此查看本示例完整代码地址&#x…

Seata 是什么

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

一、示例架构说明

可在此查看本示例完整代码地址:dubbo-samples-seata

用户采购商品业务,整个业务包含3个微服务:

  • 库存服务: 扣减给定商品的库存数量。
  • 订单服务: 根据采购请求生成订单。
  • 账户服务: 用户账户金额扣减。

image.png

StorageService

public interface StorageService {/*** 扣除存储数量*/void deduct(String commodityCode, int count);
}

OrderService

public interface OrderService {/*** 创建订单*/Order create(String userId, String commodityCode, int orderCount);
}

AccountService

public interface AccountService {/*** 从用户账户中借出*/void debit(String userId, int money);
}

二、主要的业务逻辑

BusinessService

public class BusinessServiceImpl implements BusinessService {private StorageService storageService;private OrderService orderService;/*** 采购*/public void purchase(String userId, String commodityCode, int orderCount) {// 扣除存储数量storageService.deduct(commodityCode, orderCount);// 创建订单orderService.create(userId, commodityCode, orderCount);}
}

StorageService

public class StorageServiceImpl implements StorageService {private JdbcTemplate jdbcTemplate;@Overridepublic void deduct(String commodityCode, int count) {// 修改数据库:扣减存储数量jdbcTemplate.update("update storage_tbl set count = count - ? where commodity_code = ?",new Object[]{count, commodityCode});}
}

OrderService

public class OrderServiceImpl implements OrderService {private AccountService accountService;private JdbcTemplate jdbcTemplate;public Order create(String userId, String commodityCode, int orderCount) {// 计算金额int orderMoney = calculate(commodityCode, orderCount);// 用户账户中扣减金额accountService.debit(userId, orderMoney);// 修改数据库:新建订单final Order order = new Order();order.userId = userId;order.commodityCode = commodityCode;order.count = orderCount;order.money = orderMoney;KeyHolder keyHolder = new GeneratedKeyHolder();jdbcTemplate.update(con -> {PreparedStatement pst = con.prepareStatement("insert into order_tbl (user_id, commodity_code, count, money) values (?, ?, ?, ?)",PreparedStatement.RETURN_GENERATED_KEYS);pst.setObject(1, order.userId);pst.setObject(2, order.commodityCode);pst.setObject(3, order.count);pst.setObject(4, order.money);return pst;}, keyHolder);order.id = keyHolder.getKey().longValue();return order;}
}

AccountService

public class AccountServiceImpl implements AccountService {private JdbcTemplate jdbcTemplate;@Overridepublic void debit(String userId, int money) {  // 修改数据库:用户账户中扣减金额      jdbcTemplate.update("update account_tbl set money = money - ? where user_id = ?", new Object[]{money, userId});}
}

三、快速启动示例

Step 1: 下载源码

git clone -b master https://github.com/apache/dubbo-samples.git
cd ./dubbo-samples-transaction/

Step 2: 通过 docker-compose 启动 Seata-Server 和 MySQL 等

在此示例中,我们使用 docker-compose 快速拉起 seata-server 和 mysql 等服务。

cd src/main/resources/docker
docker-compose up

Step 3: 构建用例

执行 maven 命令,打包 demo 工程

mvn clean package

Step 4: 启动 AccountService

java -classpath ./target/dubbo-samples-transaction-1.0-SNAPSHOT.jar org.apache.dubbo.samples.starter.DubboAccountServiceStarter

Step 5: 启动 OrderService

java -classpath ./target/dubbo-samples-transaction-1.0-SNAPSHOT.jar org.apache.dubbo.samples.starter.DubboOrderServiceStarter

Step 6: 启动 StorageService

java -classpath ./target/dubbo-samples-transaction-1.0-SNAPSHOT.jar org.apache.dubbo.samples.starter.DubboStorageServiceStarter

Step 7: 启动 BusinessService

java -classpath ./target/dubbo-samples-transaction-1.0-SNAPSHOT.jar org.apache.dubbo.samples.starter.DubboBusinessTester

四、示例核心流程

 

image.png

Step 1: 修改业务代码

此处仅仅需要一行注解 @GlobalTransactional 写在业务发起方的方法上:

    @GlobalTransactionalpublic void purchase(String userId, String commodityCode, int orderCount) {......}

Step 2: 安装数据库

  • 要求: MySQL (InnoDB 存储引擎)。

提示: 事实上例子中3个微服务需要3个独立的数据库,但为了方便我们使用同一物理库并配置3个逻辑连接串。

更改以下xml文件中的数据库url、username和password

dubbo-account-service.xml dubbo-order-service.xml dubbo-storage-service.xml

    <property name="url" value="jdbc:mysql://x.x.x.x:3306/xxx" /><property name="username" value="xxx" /><property name="password" value="xxx" />

Step 3: 为 Seata 创建 undo_log 表

UNDO_LOG 此表用于 Seata 的AT模式。

-- 注意当 Seata 版本升级至 0.3.0+ 将由之前的普通索引变更为唯一索引。
CREATE TABLE `undo_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`branch_id` bigint(20) NOT NULL,`xid` varchar(100) NOT NULL,`context` varchar(128) 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`),UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

Step 4: 创建相关业务表


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 5: 启动 Seata-Server 服务

  • 下载服务器软件包,将其解压缩。
Usage: sh seata-server.sh(for linux and mac) or cmd seata-server.bat(for windows) [options]Options:--host, -hThe host to bind.Default: 0.0.0.0--port, -pThe port to listen.Default: 8091--storeMode, -mlog store mode : file、dbDefault: file--helpe.g.sh seata-server.sh -p 8091 -h 127.0.0.1 -m file
http://www.shuangfujiaoyu.com/news/22556.html

相关文章:

  • 卓光网站建设北京网站推广
  • 宁波公司网站制作百度做网站推广的费用
  • 有什么网站可以做平面兼职seo赚钱暴利
  • 网站功能模块 分析百度推广多少钱一天
  • 绵阳安州区做网站的有哪些seo优化排名易下拉软件
  • 南宁 网站推广宁波seo关键词优化报价
  • 免费网站靠什么赚钱品牌推广的目的和意义
  • 建站教学视频百度seo优化收费标准
  • wordpress 做的网站seo视频
  • 新版wordpress没有关键词广州优化疫情防控举措
  • 苏州新公司网站建设sem运营是什么意思
  • 模仿京东商城网站开发视频郑州网络营销哪家正规
  • 俄语网站建设公司网络推广外包要多少钱
  • 自己建一个简单的网站北京互联网营销公司
  • 航空摄影设计绍兴seo排名公司
  • nofollow标签对网站收录的影响百度云资源共享
  • 玖久建筑网百度优化软件
  • 好多公司为啥只做网站 不考虑推广关键词优化外包服务
  • 成都哪家做网站最好推广免费
  • 大型网络手游游戏排行榜seo职业技能培训班
  • 自己网上做超市小程序seo项目优化案例分析文档
  • 有些网站做不了seo网站关键词收录查询
  • 手机网站图片切换特效企业策划咨询公司
  • 网站cname网站关键词优化案例
  • wordpress文章内容太原百度seo排名软件
  • wdcp怎么上传做好的网站网上找客户有什么渠道
  • 成都网站制作公司线上推广宣传方式有哪些
  • 广州白云做网站google搜索引擎入口
  • 培训如何优化网站百度网址安全检测
  • 在线写代码的网站郑州网络营销公司