springcloud netflix 整合 seata 使用 euraka 做注册中心,数据库使用 oracle
2021/9/24 19:10:53
本文主要是介绍springcloud netflix 整合 seata 使用 euraka 做注册中心,数据库使用 oracle,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前景
公司划分微服务后,选择使用了springcloud netflix,没有使用 springlcoud alibaba 所以这边没有通过阿里巴巴整合,注册中心使用了 euraka
项目环境
springboot 2.1.3.RELEASE
springcloud Greenwich.SR1
seata 1.3
oracle 11g
准备工作
1、先下载 seata
下载地址:https://seata.io/zh-cn/blog/download.html
2、seata 对应的 sql 脚本
下载地址:https://github.com/seata/seata/blob/develop/script/server/db/oracle.sql
3、oracle6驱动jar包,用于连接 oracle11g
下载地址:https://download.csdn.net/download/shf17782830280/10756628?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163247331716780274197292%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163247331716780274197292&biz_id=1&utm_medium=distribute.pc_search_result.none-task-download-2~download~sobaiduend~default-1-10756628.pc_v2_rank_dl_v1&utm_term=oracle6&spm=1018.2226.3001.4451
开始搭建
1、将下载后oracle 驱动包移到 lib 目录下
2、修改 seata 配置
修改 registry.conf 文件(红色为修改的地方)
registry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa type = "eureka" nacos { application = "seata-server" serverAddr = "127.0.0.1:8848" group = "SEATA_GROUP" namespace = "" cluster = "default" username = "" password = "" } eureka { serviceUrl = "http://127.0.0.1:8761/eureka" application = "middle-service-seata" weight = "1" } redis { serverAddr = "localhost:6379" db = 0 password = "" cluster = "default" timeout = 0 } zk { cluster = "default" serverAddr = "127.0.0.1:2181" sessionTimeout = 6000 connectTimeout = 2000 username = "" password = "" } consul { cluster = "default" serverAddr = "127.0.0.1:8500" } etcd3 { cluster = "default" serverAddr = "http://localhost:2379" } sofa { serverAddr = "127.0.0.1:9603" application = "default" region = "DEFAULT_ZONE" datacenter = "DefaultDataCenter" cluster = "default" group = "SEATA_GROUP" addressWaitTime = "3000" } file { name = "file.conf" } } config { # file、nacos 、apollo、zk、consul、etcd3 type = "file" nacos { serverAddr = "127.0.0.1:8848" namespace = "" group = "SEATA_GROUP" username = "" password = "" } consul { serverAddr = "127.0.0.1:8500" } apollo { appId = "seata-server" apolloMeta = "http://192.168.1.204:8801" namespace = "application" } zk { serverAddr = "127.0.0.1:2181" sessionTimeout = 6000 connectTimeout = 2000 username = "" password = "" } etcd3 { serverAddr = "http://localhost:2379" } file { name = "file.conf" } }
修改 file.conf 文件 (红色为修改的地方)
## transaction log store, only used in seata-server store { ## store mode: file、db、redis mode = "db" ## file store property file { ## store location dir dir = "sessionStore" # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions maxBranchSessionSize = 16384 # globe session size , if exceeded throws exceptions maxGlobalSessionSize = 512 # file buffer size , if exceeded allocate new buffer fileWriteBufferCacheSize = 16384 # when recover batch read size sessionReloadReadSize = 100 # async, sync flushDiskMode = async } ## database store property db { ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc. datasource = "druid" ## mysql/oracle/postgresql/h2/oceanbase etc. dbType = "oracle" driverClassName = "oracle.jdbc.driver.OracleDriver" url = "jdbc:oracle:thin:@172.***.***.***:1521:****" user = "******" password = "*******" minConn = 5 maxConn = 30 globalTable = "SEATA_GLOBAL_TABLE" branchTable = "SEATA_BRANCH_TABLE" lockTable = "SEATA_LOCK_TABLE" queryLimit = 100 maxWait = 5000 } ## redis store property redis { host = "127.0.0.1" port = "6379" password = "" database = "0" minConn = 1 maxConn = 10 queryLimit = 100 } }
创建 seata 需要的数据库表
-- -------------------------------- The script used when storeMode is 'db' -------------------------------- -- the table to store GlobalSession data CREATE TABLE global_table ( xid VARCHAR2(128) NOT NULL, transaction_id NUMBER(19), status NUMBER(3) NOT NULL, application_id VARCHAR2(32), transaction_service_group VARCHAR2(32), transaction_name VARCHAR2(128), timeout NUMBER(10), begin_time NUMBER(19), application_data VARCHAR2(2000), gmt_create TIMESTAMP(0), gmt_modified TIMESTAMP(0), PRIMARY KEY (xid) ); CREATE INDEX idx_gmt_modified_status ON global_table (gmt_modified, status); CREATE INDEX idx_transaction_id ON global_table (transaction_id); -- the table to store BranchSession data CREATE TABLE branch_table ( branch_id NUMBER(19) NOT NULL, xid VARCHAR2(128) NOT NULL, transaction_id NUMBER(19), resource_group_id VARCHAR2(32), resource_id VARCHAR2(256), branch_type VARCHAR2(8), status NUMBER(3), client_id VARCHAR2(64), application_data VARCHAR2(2000), gmt_create TIMESTAMP(6), gmt_modified TIMESTAMP(6), PRIMARY KEY (branch_id) ); CREATE INDEX idx_xid ON branch_table (xid); -- the table to store lock data CREATE TABLE lock_table ( row_key VARCHAR2(128) NOT NULL, xid VARCHAR2(128), transaction_id NUMBER(19), branch_id NUMBER(19) NOT NULL, resource_id VARCHAR2(256), table_name VARCHAR2(32), pk VARCHAR2(36), gmt_create TIMESTAMP(0), gmt_modified TIMESTAMP(0), PRIMARY KEY (row_key) ); CREATE INDEX idx_branch_id ON lock_table (branch_id); CREATE TABLE distributed_lock ( lock_key VARCHAR2(20) NOT NULL, lock_value VARCHAR2(20) NOT NULL, expire DECIMAL(18) NOT NULL, PRIMARY KEY (lock_key) ); INSERT INTO distributed_lock (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0); INSERT INTO distributed_lock (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0); INSERT INTO distributed_lock (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0); INSERT INTO distributed_lock (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);
全部修改后启动,到eureka 中查看是否注册成功
在项目中引用 seata
1、对应的模块 pom 添加依赖
<dependency> <groupId>io.seata</groupId> <artifactId>seata-spring-boot-starter</artifactId> <version>1.4.0</version> </dependency>
2、修改启动的 application.yml
添加以下配置注意红色部分
seata: enabled: true application-id: **-seata-***-server #服务名 tx-service-group: default # default是自定义的事务分组名称 enable-auto-data-source-proxy: true # 启用自动数据源代理 use-jdk-proxy: false # excludes-for-auto-proxying: # client: # rm: # async-commit-buffer-limit: 1000 # report-retry-count: 5 # table-meta-check-enable: false # report-success-enable: false # saga-branch-register-enable: false # lock: # retry-interval: 10 # retry-times: 30 # retry-policy-branch-rollback-on-conflict: true # tm: # commit-retry-count: 5 # rollback-retry-count: 5 # undo: # data-validation: true # log-serialization: jackson # log-table: undo_log # log: # exceptionRate: 100 service: vgroup-mapping: default: middle-service-seata # default是自定义的事务分组名称,seata-server是tc注册到注册中心的服务名称 # grouplist: # default: 127.0.0.1:8091 # 仅注册中心为file时使用 enable-degrade: false # 是否启用降级 disable-global-transaction: false # 是否禁用全局事务 # transport: # shutdown: # wait: 3 # thread-factory: # boss-thread-prefix: NettyBoss # worker-thread-prefix: NettyServerNIOWorker # server-executor-thread-prefix: NettyServerBizHandler # share-boss-worker: false # client-selector-thread-prefix: NettyClientSelector # client-selector-thread-size: 1 # client-worker-thread-prefix: NettyClientWorkerThread # worker-thread-size: default # boss-thread-size: 1 # type: TCP # server: NIO # heartbeat: true # serialization: seata # compressor: none # enable-client-batch-send-request: true config: type: file # 配置中心为file模式 # consul: # server-addr: 127.0.0.1:8500 # apollo: # apollo-meta: http://192.168.1.204:8801 # app-id: seata-server # namespace: application # etcd3: # server-addr: http://localhost:2379 # nacos: # namespace: # serverAddr: localhost # group: SEATA_GROUP # userName: "" # password: "" # zk: # server-addr: 127.0.0.1:2181 # session-timeout: 6000 # connect-timeout: 2000 # username: "" # password: "" registry: type: eureka # 注册中心为eureka eureka: weight: 1 service-url: http://127.0.0.1:8761/eureka # 注册中心地址 # consul: # server-addr: 127.0.0.1:8500 # etcd3: # serverAddr: http://localhost:2379 # nacos: # application: seata-server # server-addr: localhost # namespace: # userName: "" # password: "" # redis: # server-addr: localhost:6379 # db: 0 # password: # timeout: 0 # sofa: # server-addr: 127.0.0.1:9603 # region: DEFAULT_ZONE # datacenter: DefaultDataCenter # group: SEATA_GROUP # addressWaitTime: 3000 # application: default # zk: # server-addr: 127.0.0.1:2181 # session-timeout: 6000 # connect-timeout: 2000 # username: "" # password: "" # -----------seata--------------
3、模块的资源文件目录下添加 file.conf、registry.conf 文件
例:
file.conf 内容如下
transport { # tcp udt unix-domain-socket type = "TCP" #NIO NATIVE server = "NIO" #enable heartbeat heartbeat = true #thread factory for netty thread-factory { boss-thread-prefix = "NettyBoss" worker-thread-prefix = "NettyServerNIOWorker" server-executor-thread-prefix = "NettyServerBizHandler" share-boss-worker = false client-selector-thread-prefix = "NettyClientSelector" client-selector-thread-size = 1 client-worker-thread-prefix = "NettyClientWorkerThread" # netty boss thread size,will not be used for UDT boss-thread-size = 1 #auto default pin or 8 worker-thread-size = 8 } shutdown { # when destroy server, wait seconds wait = 3 } serialization = "seata" compressor = "none" } service { #vgroup->rgroup vgroup_mapping.fsp_tx_group = "default" #only support single node default.grouplist = "127.0.0.1:8091" #degrade current not support enableDegrade = false #disable disable = false #unit ms,s,m,h,d represents milliseconds, seconds, minutes, hours, days, default permanent max.commit.retry.timeout = "-1" max.rollback.retry.timeout = "-1" disableGlobalTransaction = false } client { async.commit.buffer.limit = 10000 lock { retry.internal = 10 retry.times = 30 } report.retry.count = 5 tm.commit.retry.count = 1 tm.rollback.retry.count = 1 } transaction { undo.data.validation = true undo.log.serialization = "jackson" undo.log.save.days = 7 #schedule delete expired undo_log in milliseconds undo.log.delete.period = 86400000 undo.log.table = "undo_log" } support { ## spring spring { # auto proxy the DataSource bean datasource.autoproxy = false } }
registry.conf
registry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa type = "eureka" nacos { application = "seata-server" serverAddr = "127.0.0.1:8848" group = "SEATA_GROUP" namespace = "" cluster = "default" username = "" password = "" } eureka { serviceUrl = "http://127.0.0.1:8761/eureka" application = "middle-service-seata" weight = "1" } redis { serverAddr = "localhost:6379" db = 0 password = "" cluster = "default" timeout = 0 } zk { cluster = "default" serverAddr = "127.0.0.1:2181" sessionTimeout = 6000 connectTimeout = 2000 username = "" password = "" } consul { cluster = "default" serverAddr = "127.0.0.1:8500" } etcd3 { cluster = "default" serverAddr = "http://localhost:2379" } sofa { serverAddr = "127.0.0.1:9603" application = "default" region = "DEFAULT_ZONE" datacenter = "DefaultDataCenter" cluster = "default" group = "SEATA_GROUP" addressWaitTime = "3000" } file { name = "file.conf" } } config { # file、nacos 、apollo、zk、consul、etcd3 type = "file" nacos { serverAddr = "127.0.0.1:8848" namespace = "" group = "SEATA_GROUP" username = "" password = "" } consul { serverAddr = "127.0.0.1:8500" } apollo { appId = "seata-server" apolloMeta = "http://192.168.1.204:8801" namespace = "application" } zk { serverAddr = "127.0.0.1:2181" sessionTimeout = 6000 connectTimeout = 2000 username = "" password = "" } etcd3 { serverAddr = "http://localhost:2379" } file { name = "file.conf" } }
4、其它服务配置重复上面的步骤既可,注意红色部分
5、最后启动项目
可以在 seata 控制台中看到注册信息表示注册成功,然后就可以再代码中使用@GlobalTransactional注解了
这篇关于springcloud netflix 整合 seata 使用 euraka 做注册中心,数据库使用 oracle的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15JavaMailSender是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-15JWT 用户校验学习:从入门到实践
- 2024-11-15Nest学习:新手入门全面指南
- 2024-11-15RestfulAPI学习:新手入门指南
- 2024-11-15Server Component学习:入门教程与实践指南
- 2024-11-15动态路由入门:新手必读指南
- 2024-11-15JWT 用户校验入门:轻松掌握JWT认证基础
- 2024-11-15Nest后端开发入门指南
- 2024-11-15Nest后端开发入门教程
- 2024-11-15RestfulAPI入门:新手快速上手指南