docker安装rocketmq_实战!springcloud nacos 基于rocketmq 消息的分布式事物,刺激

一、准备工作

1、整体流程图

8abcf2baf9fbd1847e4ffee47fa48da8.png

基于事务消息分布式事物方案是 事务消息最终是分布式事务的最终一致性跟我之前写的分布式的seata的方案不太一样,比如a给b打钱,当a的钱扣除成功之后(扣除失败则本次失败),。 如果系统 B 的本地事务执行失败了咋办? 基于 mq 重试咯,mq 会自动不断重试直到成功,如果实在是不行,可以发送报警由人工来手工回滚和补偿。 这种方案的要点就是可以基于 mq 来进行不断重试,最终一定会执行成功的。 因为一般执行失败的原因是网络抖动或者数据库瞬间负载太高,都是暂时性问题。 通过这种方案,99.9%的情况都是可以保证数据最终一致性的,剩下的 0.1%出问题的时候,就人工修复数据呗。

2、安装rocketmq

这里使用docker安装rocketmq,先安装docker

  • Centos系统
sudo yum install -y yum-utils  device-mapper-persistent-data lvm2sudo yum-config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.reposudo yum install docker-ce -ysudo systemctl enable dockersudo systemctl start docker

在安装过程中,也许会遇到Requires: container-selinux >= 2.9 的异常; 可以打开Centos下载包中的最新container-selinux包的地址, 然后运行:

sudo yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.68-1.el7.noarch.rpm
  • Ubuntu系统
sudo apt-get updatesudo apt-get install apt-transport-https ca-certificates curl software-properties-commoncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -sudo apt-key fingerprint 0EBFCD88sudo add-apt-repository    "deb [arch=amd64] https://download.docker.com/linux/ubuntu    $(lsb_release -cs)    stable"sudo apt-get update   sudo apt-get install docker-ce
  • Mac系统 docs.docker.com/docker-for-…
  • Windows docs.docker.com/docker-for-…

再安装docker-compose

pip install docker-compose -i https://mirrors.aliyun.com/pypi/simple/

如果pip不存在,可以尝试

sudo yum install python-pip sudo pip install --upgrade pip

部署rocketmq(这里以centos为例)

mkdir /usr/local/docker/rocketmqcd /usr/local/docker/rocketmqvi broker.conf

broker.conf内容如下

brokerClusterName=DefaultClusterbrokerName=broker-abrokerId=0# 修改为你宿主机的 IPbrokerIP1=192.168.30.131defaultTopicQueueNums=4autoCreateTopicEnable=trueautoCreateSubscriptionGroup=truelistenPort=10911deleteWhen=04fileReservedTime=120mapedFileSizeCommitLog=1073741824mapedFileSizeConsumeQueue=300000diskMaxUsedSpaceRatio=88maxMessageSize=65536brokerRole=ASYNC_MASTERflushDiskType=ASYNC_FLUSH
cd /usr/local/docker/rocketmqvi docker-compose.yml

docker-compose.yml 内容如下

version: '3.5'services:  rmqnamesrv:    image: foxiswho/rocketmq:server    container_name: rmqnamesrv    ports:      - 9876:9876    volumes:      - ./data/logs:/opt/logs      - ./data/store:/opt/store    networks:        rmq:          aliases:            - rmqnamesrv  rmqbroker:    image: foxiswho/rocketmq:broker    container_name: rmqbroker    ports:      - 10909:10909      - 10911:10911    volumes:      - ./data/logs:/opt/logs      - ./data/store:/opt/store      - ./data/brokerconf/broker.conf:/etc/rocketmq/broker.conf    environment:        NAMESRV_ADDR: "rmqnamesrv:9876"        JAVA_OPTS: " -Duser.home=/opt"        JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m"    command: mqbroker -c /etc/rocketmq/broker.conf    depends_on:      - rmqnamesrv    networks:      rmq:        aliases:          - rmqbroker  rmqconsole:    image: styletang/rocketmq-console-ng    container_name: rmqconsole    ports:      - 8080:8080    environment:        JAVA_OPTS: "-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"    depends_on:      - rmqnamesrv    networks:      rmq:        aliases:          - rmqconsolenetworks:  rmq:    name: rmq    driver: bridge
cd /usr/local/docker/rocketmqdocker-compose up -d 

启动完成后docker ps -a 正常如下图

d836b9408a12fcc979f2428f900ea841.png

输入 ip:8080 可进入 rockermq 控制台

3、下载启动nacos

nacos-server-1.1.:github.com/alibaba/nac… 启动nacos访问:http://localhost:8848/nacos 用户名密码 nacos/nacos

4、 demo 工程代码:github.com/leo20131231…

5、建数据库

示例工程order订单 的数据库脚本:github.com/leo20131231…

示例工程storage 的数据库脚本:github.com/leo20131231…

三、启动项目

修改相应的数据库链接

请求 http://localhost:9091/order/placeOrder/commit

1、订单系统发送prepare消息

d69185aa768906b29fd67979ce0d8704.png

2、订单系统执行本地事物 1).如果本地事务执行失败,回滚消息,Broker端会删除半消息 2)如果本地事务执行成功,会确认发送消息 3)如果当本地事务执行一班系统挂掉了,系统会重新调用下面checkLocalTransaction方法

a50e772fdf4d65bf6702a837b3a7a013.png

3、检查本地事务执行状态

6a79ad69c3dd81715f8ec96b6ef0ed1e.png

4、库存系统消息成功,扣减库存

ff0767edd4286036741257e7f9c7b61e.png

作者:leo2012
链接:https://juejin.im/post/6854573218851160071
来源:掘金

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值