nacos+seata+springcloud

1、linux下nacos安裝

1-1、下載安裝包

官網(wǎng)(https://nacos.io/zh-cn/docs/quick-start.html

下載地址(https://github.com/alibaba/nacos/releases/

下載示例

1-2、解壓安裝包

將壓縮包放到相應的目錄下進行解壓,解壓:

tar -zxvf?nacos-server-2.0.0.tar.gz

解壓完成后的nacos文件

1-3、編輯相應配置

vim /nacos/conf/application.properties


1-4、初始化數(shù)據(jù)庫

我是用Navicat客戶端連接數(shù)據(jù)庫,執(zhí)行/nacos/conf目錄下nacos-mysql.sql文件,進行數(shù)據(jù)庫初始化

進入bin目錄,cd?/nacos/bin

啟動nacos命令(-m?standalone 指定啟動模式為單機版):? ? ? ? ??

sh startup.sh -m standalone


查看日志?

tail -500f /nacos/logs/start.out



默認端口為8848,在application.aproperties中可以配置。

centos7給防火墻開發(fā)8848端口:

firewall-cmd --zone=public --add-port=8848/tcp --permanent?

重新載入防火墻:

firewall-cmd --reload

訪問nacos控制臺,http://192.168.232.128:8848/nacos?( http://ip:8848/nacos),用戶名密碼均為:nacos


關(guān)閉nacos命令,bin目錄下執(zhí)行

./shutdown.sh



2、seata安裝

2-1、軟件下載

下載地址?https://github.com/seata/seata/releases

tar -xvf seata-server-1.4.1.tar.gz

2-2、修改目錄下 conf/registry.conf 配置

vim conf/registry.conf


registry {

? # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa

? type = "nacos"? ? // 這里修改成nacos

? loadBalance = "RandomLoadBalance"

? loadBalanceVirtualNodes = 10

? nacos {

? ? application = "seata-server"? ? // nacos注冊時的服務名

? ? serverAddr = "192.168.232.128"? ? // nacos地址

? ? group = "SEATA_GROUP"

? ? namespace = ""? ? // 默認public

? ? cluster = "default"

? ? username = "nacos"

? ? password = "nacos"

? }

}

config {

? # file、nacos 、apollo、zk、consul、etcd3

? type = "nacos"

? nacos {

? ? serverAddr = "192.168.232.128"

? ? namespace = ""

? ? group = "SEATA_GROUP"

? ? username = "nacos"

? ? password = "nacos"

? }

}

2-3、修改conf目錄下file.conf配置

vim conf/file.conf

2-4、修改conf目錄下registry.conf配置

vim conf/registry.conf

2-5、初始化表

創(chuàng)建seata數(shù)據(jù)庫

-- -------------------------------- The script used when storeMode is 'db' --------------------------------

-- the table to store GlobalSession data

CREATE TABLE IF NOT EXISTS `global_table`

(

? ? `xid`? ? ? ? ? ? ? ? ? ? ? VARCHAR(128) NOT NULL,

? ? `transaction_id`? ? ? ? ? ? BIGINT,

? ? `status`? ? ? ? ? ? ? ? ? ? TINYINT? ? ? NOT NULL,

? ? `application_id`? ? ? ? ? ? VARCHAR(32),

? ? `transaction_service_group` VARCHAR(32),

? ? `transaction_name`? ? ? ? ? VARCHAR(128),

? ? `timeout`? ? ? ? ? ? ? ? ? INT,

? ? `begin_time`? ? ? ? ? ? ? ? BIGINT,

? ? `application_data`? ? ? ? ? VARCHAR(2000),

? ? `gmt_create`? ? ? ? ? ? ? ? DATETIME,

? ? `gmt_modified`? ? ? ? ? ? ? DATETIME,

? ? PRIMARY KEY (`xid`),

? ? KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),

? ? KEY `idx_transaction_id` (`transaction_id`)

) ENGINE = InnoDB

? DEFAULT CHARSET = utf8;

-- the table to store BranchSession data

CREATE TABLE IF NOT EXISTS `branch_table`

(

? ? `branch_id`? ? ? ? BIGINT? ? ? NOT NULL,

? ? `xid`? ? ? ? ? ? ? VARCHAR(128) NOT NULL,

? ? `transaction_id`? ? BIGINT,

? ? `resource_group_id` VARCHAR(32),

? ? `resource_id`? ? ? VARCHAR(256),

? ? `branch_type`? ? ? VARCHAR(8),

? ? `status`? ? ? ? ? ? TINYINT,

? ? `client_id`? ? ? ? VARCHAR(64),

? ? `application_data`? VARCHAR(2000),

? ? `gmt_create`? ? ? ? DATETIME(6),

? ? `gmt_modified`? ? ? DATETIME(6),

? ? PRIMARY KEY (`branch_id`),

? ? KEY `idx_xid` (`xid`)

) ENGINE = InnoDB

? DEFAULT CHARSET = utf8;

-- the table to store lock data

CREATE TABLE IF NOT EXISTS `lock_table`

(

? ? `row_key`? ? ? ? VARCHAR(128) NOT NULL,

? ? `xid`? ? ? ? ? ? VARCHAR(96),

? ? `transaction_id` BIGINT,

? ? `branch_id`? ? ? BIGINT? ? ? NOT NULL,

? ? `resource_id`? ? VARCHAR(256),

? ? `table_name`? ? VARCHAR(32),

? ? `pk`? ? ? ? ? ? VARCHAR(36),

? ? `gmt_create`? ? DATETIME,

? ? `gmt_modified`? DATETIME,

? ? PRIMARY KEY (`row_key`),

? ? KEY `idx_branch_id` (`branch_id`)

) ENGINE = InnoDB

? DEFAULT CHARSET = utf8;

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`) USING BTREE,

? UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`) USING BTREE

) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

2-6、在seata目錄下創(chuàng)建config.txt文件

touch config.txt

注意 service.vgroup_mapping.${your-service-gruop}=default,中間的 ${your-service-gruop} 為自己定義的服務組名稱,SpringBlade默認為service-name-group的格式。

若服務名為blade-demo,則這里配置的 ${your-service-gruop} 為blade-demo-group

比如截圖中的兩個服務,分別是gateway-fescar-service和api-admin-fescar-service,他們對應的配置如下

config.txt內(nèi)容根據(jù)seata版本獲取,地址:https://github.com/seata/seata/tree/1.4.1/script/config-center

2-7、創(chuàng)建導入腳本nacos-config.sh

在seata目錄下創(chuàng)建script文件夾

mkdir script

創(chuàng)建導入腳本nacos-config.sh

cd script

vim?nacos-config.sh

nacos-config.sh腳本內(nèi)容,根據(jù)seata版本自行下載,地址:?https://github.com/seata/seata/tree/1.4.1/script/config-center/nacos

給腳本賦予執(zhí)行權(quán)

chmod +x /nacos-config.sh

執(zhí)行腳本

sh nacos-config.sh

執(zhí)行成功可以看到配置列表

注意:
  執(zhí)行.sh腳本時出現(xiàn)$’\r’: 未找到命令,

原因

  是因為命令直接從windows 復制過來導致的

解決

  yum install dos2unix

  dos2unix **.sh 進行轉(zhuǎn)換

  再次執(zhí)行即可

2-8、啟動seata

cd /seata/bin

sh seata-server.sh -h 192.168.232.128 -p 8091 &

注:ip地址為127.0.0.1時默認在nacos注入內(nèi)網(wǎng)ip,導致外網(wǎng)無法訪問

啟動成功如圖所示



3、springcloud配置nacos+seata

3-1、創(chuàng)建項目

pom.xml加入以賴

<properties>

? ? <java.version>1.8</java.version>

? ??<nacos.version>2.1.3.RELEASE</nacos.version>

????<spring.cloud.seata.version>2.1.0.RELEASE</spring.cloud.seata.version>

????<seata-all.version>1.4.1</seata-all.version>

????<druid.version>1.1.10</druid.version>

</properties>

</dependencyManagement>

????</dependencies>

?????????<dependency>

? ? ? ? ? ? <groupId>com.alibaba.cloud</groupId>

? ? ? ? ? ? <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

? ? ? ? ? ? <version>${nacos.version}</version>

? ? ? ? </dependency>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>com.alibaba.cloud</groupId>

? ? ? ? ? ? <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

? ? ? ? ? ? <version>${nacos.version}</version>

? ? ? ? </dependency>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>com.alibaba.cloud</groupId>

? ? ? ? ? ? <artifactId>spring-cloud-alibaba-seata</artifactId>

? ? ? ? ? ? <version>${spring.cloud.seata.version}</version>

? ? ? ? </dependency>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>io.seata</groupId>

? ? ? ? ? ? <artifactId>seata-all</artifactId>

? ? ? ? ? ? <version>${seata-all.version}</version>

? ? ? ? </dependency>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>com.alibaba</groupId>

? ? ? ? ? ? <artifactId>druid-spring-boot-starter</artifactId>

? ? ? ? ? ? <version>${druid.version}</version>

? ? ? ? </dependency>

? ? </dependencies>

</dependencyManagement>

配置項目application.yml

spring:

? cloud:

? ??alibaba:?

? ??????seata:?

? ??????????tx-service-group: apiadmin-service-group?

? ? nacos:

? ? ? discovery:

? ? ? ? server-addr: 192.168.232.128:8848

? ? ? ? group: SEATA_GROUP

? ??????ip: 192.168.232.128

nacos:

? group: SEATA_GROUP

? namespace: public

? # 配置中心地址

? server-addr: 127.0.0.1:8848

? seata:

? ? application: seata-server

? ? tx-service-group: my_test_tx_group

seata:

? enabled: true

? application-id: ${spring.application.name}? ? // 當前應用模塊名稱

? tx-service-group: ${nacos.seata.tx-service-group}

? enable-auto-data-source-proxy: true

? config:

? ? # 指明類型

? ? type: nacos

? ? nacos:

? ? ? server-addr: ${nacos.server-addr}

? ? ? namespace: ${nacos.namespace}

? ? ? group: ${nacos.group}

? ? ? username: "nacos"

? ? ? password: "nacos"

? registry:

? ? type: nacos

? ? nacos:

? ? ? application: ${nacos.seata.application}

? ? ? server-addr: ${nacos.server-addr}

? ? ? namespace: ${nacos.namespace}

? ? ? group: ${nacos.group}

? ? ? username: "nacos"

? ? ? password: "nacos"



4、docker-compose運行springcloud

4-1、docker-compose安裝

Linux

Linux 上我們可以從 Github 上下載它的二進制包來使用,最新發(fā)行的版本地址:https://github.com/docker/compose/releases。

運行以下命令以下載 Docker Compose 的當前穩(wěn)定版本:

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

要安裝其他版本的 Compose,請?zhí)鎿Q 1.24.1。

將可執(zhí)行權(quán)限應用于二進制文件:

sudo chmod +x /usr/local/bin/docker-compose

創(chuàng)建軟鏈:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

測試是否安裝成功:

docker-compose --version

cker-compose version 1.24.1, build 4667896b

4-2、Dockerfile定義

FROM?java:8

RUNmkdir/microservice

WORKDIR?/microservice

ADD?/register-center-1.0.jar?/microservice/

EXPOSE8761

ENTRYPOINT?["java","-Djava.security.egd=file:/dev/./urandom","-jar","/microservice/register-center-1.0.jar"]

說明:

FROM java:8

? ? ? ? FROM 指定基于的基礎(chǔ)鏡像。必須在第一行,本例中是基于Java 8作為基礎(chǔ)鏡像的。

RUN mkdir /microservice

? ? ? ? RUN 執(zhí)行shell命令。本例中是用于創(chuàng)建microservice目錄。

WORKDIR /microservice

? ? ? ?WORKDIR 為后續(xù)的RUN、CMD、ENTRYPOINT指令配置工作目錄。

ADD /register-center-1.0.jar /microservice/

? ? ? ?ADD 復制指定位置的程序包到容器的指定位置。本例中是將位于該Dockerfile同一目錄下的springCloudEureka-1.0.jar復制到容器的/microservice/目錄下。

EXPOSE 8761

? ? ? ?EXPOSE 暴露容器的端口,供外部使用。本例中是只注冊中心服務springCloudEureka的端口,并確保對外能夠訪問。

ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", ……]

? ? ? ? ENTRYPOINT 配置容器啟動后只需的命令。本例中是啟動Java程序。

4-3、docker-compose.yml定義

這個腳本中定義了一次性啟停上述三個服務,并實現(xiàn)服務間的通信,腳本內(nèi)容如下:

version:?'3'

services:

???#注冊中心

???#自定義的服務名稱

???register-center:?

????#鏡像名稱

????image:?register-center:v1

????#容器名稱

????container_name:?register-center

????#容器down掉后,會自動重啟

????restart:?always

????#掛載一個目錄或者一個已存在的數(shù)據(jù)卷容器。格式為宿主機目錄:容器內(nèi)目錄???

????volumes:

??????-?$PWD/register-center/register-center-1.0.jar:/microservice/

????#映射端口。格式為宿主機端口:容器端口

????ports:

??????-?"8761:8761"

????#容器啟動后,執(zhí)行的命令

????command:?java?-Djava.security.egd=file:/dev/./urandom?-jar?/microservice/register-center-1.0.jar


???#配置中心

???config-center:?

????image:?config-center:v1

????container_name:?config-center

????restart:?always

????volumes:

??????-?$PWD/config-center/config-center-1.0.jar:/microservice/

????ports:

??????-?"8888:8888"

????command:?java?-Djava.security.egd=file:/dev/./urandom?-jar?/microservice/config-center-1.0.jar

????depends_on:

??????-?register-center?

????links:

??????-?register-center:register-center


???#網(wǎng)關(guān)服務

???gateway:?

????image:?gateway:v1

????container_name:?gateway

????restart:?always

????volumes:

??????-?$PWD/gateway/gateway-1.0.jar:/microservice/

????ports:

??????-?"8111:8111"

????command:?java?-Djava.security.egd=file:/dev/./urandom?-jar?/microservice/gateway-1.0.jar

????depends_on:

??????-?register-center

??????-?config-center

????links:

??????-?register-center:register-center

??????-?config-center:config-center

4-4、編譯、運行

將各個打包好的服務jar包 、Dockerfile腳本、 docker-compose.yml上傳至docker服務器上,我是存放在如下結(jié)構(gòu)的目錄下,具體依個人習慣而定。


編譯鏡像

[docker@docker?register-center]$?docker?build?-t?gateway:v1?.? ? ? // 注意最后的 . 一定要加上

Sending?build?context?to?Docker?daemon?44.31MB

Step?1/6?:?FROM?java:8

?--->?d23bdf5b1b1b

Step?2/6?:?RUN?mkdir?/microservice

?--->?Running?in?fcf4af033ac5

?--->?c0cf16047e86

Removing?intermediate?container?fcf4af033ac5

Step?3/6?:?WORKDIR?/microservice

?--->?cc1fae4f23dc

Removing?intermediate?container?d6fd78d760a9

Step?4/6?:?ADD?/register-center-1.0.jar?/microservice/

?--->?ee8d0db56843

Removing?intermediate?container?dd5b20c5e72c

Step?5/6?:?EXPOSE?8761

?--->?Running?in?46ae28623bd1

?--->?d02692f9c49c

Removing?intermediate?container?46ae28623bd1

Step?6/6?:?ENTRYPOINT?java?-Djava.security.egd=file:/dev/./urandom?-jar?/microservice/register-center-1.0.jar

?--->?Running?in?cf63f2ca01af

?--->?51431eb470e5

Removing?intermediate?container?cf63f2ca01af

Successfully?built?51431eb470e5

Successfully?tagged?register-center:v1


運行

?在docker-compose.yml目錄下,執(zhí)行docker-compose up -d命令后臺啟動。

[root@localhost server-bomeiyi]# ll

總用量 4

-rw-r--r--. 1 root root 749 4月? 16 17:41 docker-compose.yml

drwxrwxrwx. 4 root root? 57 4月? 16 17:59 images

[root@localhost server-bomeiyi]# docker-compose up -d

docker-compose 命令

啟停命令

docker-compose up -d 全部后臺啟動

docker-compose stop xxx 停止某一個服務

docker-compose stop 停止所有服務

docker-compose start xxx啟動某一個服務

docker-compose restart xxx 重啟某一個服務

docker-compose stop xxx && docker-compose up -d --build xxx? ?// 停止某個服務并重新打包某個鏡像重新啟動某個服務

其他命令

docker-compose config 查看當前yml文件中的所有配置

docker-compose rm xxx 刪除某一個服務(容器)

docker-compose rm 刪除所有服務(容器)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容