# Apollo安装 准备: 环境要求:jdk1.8 mysql5.7.27 下载:https://github.com/ctripcorp/apollo/wiki  *** 上传压缩包:  在Apollo目录下创建三个文件夹,因为在同一目录下解压会有名称相同的文件。 在三个文件夹下分别解压,logs是记录日志的文件。 下载sql文件:生成数据库: 地址:同上找一下。apolloconfigdb.sql和apolloportaldb.sql 导入MySQL生成数据库。 上传sql文件到/root/目录下:  导入mysql: ~~~shell mysql> source /root/apolloconfigdb.sql mysql> source /root/apolloportaldb.sql mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | ApolloConfigDB | | ApolloPortalDB | | mysql | | performance_schema | | sys | +--------------------+ 6 rows in set (0.00 sec) mysql> flush privileges; ~~~  *** ### 三个服务的配置信息: #### 修改一: ~~~shell 每个对应文件下有个/config/application-github.properties文件,修改数据库url 用户 密码。 [root@docker-angent_1 ~]# cd /apollo/adminservice/apollo-adminservice-1.3.0/config/ [root@docker-angent_1 config]# vim application-github.properties # DataSource spring.datasource.url = jdbc:mysql://10.160.103.100:3306/ApolloConfigDB?characterEncoding=utf8 spring.datasource.username = root spring.datasource.password = 123 别遗漏,改三个文件!! ~~~  *** #### 修改二: ~~~shell 修改startup.sh文件: 同样:每个对应文件下有个scripts/startup.sh文件 [root@docker-angent_1 scripts]# pwd /apollo/adminservice/apollo-adminservice-1.3.0/scripts [root@docker-angent_1 scripts]# vim startup.sh #!/bin/bash SERVICE_NAME=apollo-adminservice ## Adjust log dir if necessary LOG_DIR=/apollo/logs 修改日志地址 ## Adjust server port if necessary SERVER_PORT=9002 是否被占用 别遗漏,改三个文件!! ~~~  *** #### 修改三: ~~~shell 修改portal服务下的meta配置: [root@docker-angent_1 ~]# cd /apollo/portal/apollo-portal-1.3.0/config [root@docker-angent_1 config]# vim apollo-env.properties local.meta=http://localhost:9001 dev.meta=http://localhost:9001 fat.meta=http://fill-in-fat-meta-server:8080 uat.meta=http://fill-in-uat-meta-server:8080 lpt.meta=${lpt_meta} pro.meta=http://fill-in-pro-meta-server:8080 ~~~ *** ### 修改数据库meta地址: ~~~shell mysql> use ApolloConfigDB; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +--------------------------+ | Tables_in_ApolloConfigDB | +--------------------------+ | AccessKey | | App | | AppNamespace | | Audit | | Cluster | | Commit | | GrayReleaseRule | | Instance | | InstanceConfig | | Item | | Namespace | | NamespaceLock | | Release | | ReleaseHistory | | ReleaseMessage | | ServerConfig | +--------------------------+ 16 rows in set (0.01 sec) mysql> use ServerConfig; ERROR 1049 (42000): Unknown database 'ServerConfig' mysql> select * from ServerConfig; +----+------------------------------+---------+-------------------------------+---------------------------------------------------------------------------------------------+-----------+----------------------+------------------------+---------------------------+---------------------+ | Id | Key | Cluster | Value | Comment | IsDeleted | DataChange_CreatedBy | DataChange_CreatedTime | DataChange_LastModifiedBy | DataChange_LastTime | +----+------------------------------+---------+-------------------------------+---------------------------------------------------------------------------------------------+-----------+----------------------+------------------------+---------------------------+---------------------+ | 1 | eureka.service.url | default | http://localhost:8080/eureka/ | Eureka服务Url,多个service以英文逗号分隔 | | default | 2020-11-27 14:28:57 | | 2020-11-27 14:28:57 | | 2 | namespace.lock.switch | default | false | 一次发布只能有一个人修改开关 | | default | 2020-11-27 14:28:57 | | 2020-11-27 14:28:57 | | 3 | item.value.length.limit | default | 20000 | item value最大长度限制 | | default | 2020-11-27 14:28:57 | | 2020-11-27 14:28:57 | | 4 | config-service.cache.enabled | default | false | ConfigService是否开启缓存,开启后能提高性能,但是会增大内存消耗! | | default | 2020-11-27 14:28:57 | | 2020-11-27 14:28:57 | | 5 | item.key.length.limit | default | 128 | item key 最大长度限制 | | default | 2020-11-27 14:28:57 | | 2020-11-27 14:28:57 | +----+------------------------------+---------+-------------------------------+---------------------------------------------------------------------------------------------+-----------+----------------------+------------------------+---------------------------+---------------------+ 5 rows in set (0.00 sec) mysql> exit # eureka地址修改为真实的地址: mysql> update ServerConfig set Value="http://10.162.1.76:8761/eureka/" where id = 1; ----------------------------------------------------------- 设置最大连接数为1500、默认是100太小了。 mysql> show variables like 'max_connections'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 1000 | +-----------------+-------+ 1 row in set (0.02 sec) mysql> set global max_connections = 1500; Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'max_connections'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 1500 | +-----------------+-------+ 1 row in set (0.00 sec) ~~~  *** #### 启动三个服务 启动三个/scripts/startup.sh 注意服务的启动顺序: configservice—adminservice—portal ### 核算微服务apollo配置与使用 1. 使用apollo新建项目添加配置文件 1.1. 登录apollo 测试环境地址:http://10.162.1.76:9003/ 用户名:apollo 密码:admin 1.2. 新建项目  输入ID与名称,一般与应用名保持一致,输入完成点击提交  默认application.properties,核算配置文件为application.yml,需要新建namespace,点击添加namespace  点击创建namespace  点击private  选择yml输入application,点击提交  点击返回项目首页  点击编辑  粘贴进去配置文件的所有内容(注意license内容是单行的,出现以下情况需要删除回车符),然后点击✔号  点击发布   这样apollo项目就建好了,如果一个应用在多个环境使用apollo配置,只需要新建集群即可,步骤如下: 点击添加集群  输入集群名称  点击返回项目首页,这样就有一个环境单独使用的配置  按照之前步骤添加配置信息即可 1.3. 修改项目配置使用apollo 在配置文件bootstrap.yml中添加apollo 注意信息如下如果多个环境新建了多个集群,每个环境的cluster都要改为相应的集群名称 app: id: ycloans-file-service apollo: meta: http://10.200.9.7:9001 cluster: DEV #集群名称 cacheDir: ../apollo/ #apollo配置文件存放目录 bootstrap: enabled: ***\*true\**** namespace: application.yml 应用的main方法添加相应的注解 @EnableApolloConfig({"application.yml"})  以上就完成了apollo的配置使用。 ycloans-pay-service (namespace 配置) ~~~shell EUREKA: eureka.instance.prefer-ip-address = true eureka.instance.instanceId = ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port} eureka.instance.lease-renewal-interval-in-seconds = 5 eureka.instance.lease-expiration-duration-in-seconds = 10 eureka.instance.status-page-url-path = /management/info eureka.instance.health-check-url-path = /management/health eureka.instance.metadata-map.profile = ${spring.profiles.active} eureka.instance.metadata-map.version = ${info.project.version} eureka.client.service-url.defaultZone = http://10.162.1.76:8761/eureka/,http://10.162.1.100:8762/eureka/ eureka.client.enabled = true eureka.client.healthcheck.enabled = true eureka.client.fetch-registry = true eureka.client.register-with-eureka = true eureka.client.instance-info-replication-interval-seconds = 10 eureka.client.registry-fetch-interval-seconds = 10 ---------------------------------------------------------- ############################################ #### ActiveMq 消息队列配置 ############################################ # 采用的消息队列类型: # 0-default,仅内存模拟 # 1-redisMq # 2-activeMq spring.mq.type = 2 # 消费通知方式 0-开启线程调用borker接口; 1-开启线程放入消息队列 # 如果此值被设置成1,则broker启动时需要开启监听通知结果的队列,队列命名 # 规则是: 业务对列:result reliable.message.consumer.notify.type = 1 reliable.message.consumer.notify.thread.corePerSize = 100 reliable.message.consumer.notify.thread.maxPerSize = 500 reliable.message.consumer.notify.thread.keepAliveTime = 500 reliable.message.consumer.notify.thread.blockingQueueSize = 500 test.activemq.net-address = 127.0.0.1 # spring.activemq.broker-url = tcp://10.162.1.245:61616 测试环境 spring.activemq.broker-url = tcp://10.162.1.100:61616 #spring.activemq.broker-url = tcp://activemq-net:61616 spring.activemq.user = admin spring.activemq.password = admin # 在考虑结束之前等待的时间 spring.activemq.close-timeout = 15s # 默认代理URL是否应该在内存中。如果指定了显式代理,则忽略此值。 spring.activemq.in-memory = false # 是否在回滚消息之前停止消息传递。这意味着当启用此命令时,消息顺序不会被保留。 spring.activemq.non-blocking-redelivery = false # 等待消息发送响应的时间。设置为0等待永远。 spring.activemq.send-timeout = 0 spring.activemq.queue-name = aa:pay:mock spring.activemq.response-queue-name = aa:pay:mock:result # 表示使用Topic模式还是queue模式,默认使用topic模式 spring.activemq.toTopic = true spring.pool.enabled = true spring.pool.max-connections = 10 spring.pool.idle-timeout = 30000 #默认情况下activemq提供的是queue模式,若要使用topic模式需要配置下面配置 spring.jms.pub-sub-domain = true # 是否信任所有包 #spring.activemq.packages.trust-all= # 要信任的特定包的逗号分隔列表(当不信任所有包时) #spring.activemq.packages.trusted= # 当连接请求和池满时是否阻塞。设置false会抛“JMSException异常”。 #spring.activemq.pool.block-if-full=true # 如果池仍然满,则在抛出异常前阻塞时间。 #spring.activemq.pool.block-if-full-timeout=-1ms # 是否在启动时创建连接。可以在启动时用于加热池。 #spring.activemq.pool.create-connection-on-startup=true # 是否用Pooledconnectionfactory代替普通的ConnectionFactory。 #spring.activemq.pool.enabled=false # 连接过期超时。 #spring.activemq.pool.expiry-timeout=0ms # 连接空闲超时 #spring.activemq.pool.idle-timeout=30s # 连接池最大连接数 #spring.activemq.pool.max-connections=1 # 每个连接的有效会话的最大数目。 #spring.activemq.pool.maximum-active-session-per-connection=500 # 当有"JMSException"时尝试重新连接 #spring.activemq.pool.reconnect-on-exception=true # 在空闲连接清除线程之间运行的时间。当为负数时,没有空闲连接驱逐线程运行。 #spring.activemq.pool.time-between-expiration-check=-1ms # 是否只使用一个MessageProducer #spring.activemq.pool.use-anonymous-producers=true ---------------------------------- YCLOANS-PUBLIC: license.licenseContext = <?xml version="1.0" encoding="UTF-8"?><license build-time="Mon May 06 11:39:46 CST 2019" validate-code="FC6107A40B8E7CF356B4EC5CC39A9CA6"><element name="license_code">0000011874</element><element name="product_code">0000001122</element><element name="product_name_zh-cn">宇信科技基于微服务框架统一开发平台</element><element name="product_name_en-us">YUSP</element><element name="version_major">1</element><element name="version_sub">0</element><element name="version_publish">1</element><element name="complie_date">2018-03-20</element><element name="license_type">内部试用许可证</element><element name="customer_name"/><element name="contract_code"/><element name="license_start_time">2019-05-06</element><element name="license_end_time">2119-06-01</element></license> license.licenseModel = TRIAL management.health.rabbit.enabled = false management.health.ycloansmq.enabled = true management.endpoints.web.base-path = /api/system/actuator management.endpoint.health.show-details = always management.endpoints.web.exposure.include = * management.security.enabled = false swagger.enabled = true swagger.title = YUSP APP ycloans-starter Application API swagger.description = YUSP APP ycloans-starter API documentation swagger.version = 2.1.1.RELEASE spring.liquibase.enabled = false spring.liquibase.change-log = classpath:config/liquibase/master.xml spring.cloud.inetutils.preferred-networks = 172.20.* spring.jackson.serialization.INDENT_OUTPUT = true spring.messages.cache-duration = 1 pagehelper.helperDialect = mysql pagehelper.reasonable = true mapper.mappers[0] = cn.com.yusys.yusp.commons.mapper.CommonMapper ----------------------------------------------- MYSQL: ###################################### ## MYSQL数据库配置 ###################################### spring.datasource.url = jdbc:mysql://10.162.1.102:3306/apolloconfigdb?useUnicode=true&characterEncoding=utf8&useSSL=false spring.datasource.username = apollo spring.datasource.password = apollo spring.datasource.hikari.minimum-idle = 20 spring.datasource.hikari.maximum-pool-size = 500 spring.datasource.hikari.data-source-properties.cachePrepStmts = true spring.datasource.hikari.data-source-properties.prepStmtCacheSize = 250 spring.datasource.hikari.data-source-properties.prepStmtCacheSqlLimit = 2048 spring.datasource.hikari.data-source-properties.useServerPrepStmts = true # 特别注意此处,否则存储mysql将无效 mybatis.mapperLocations = classpath*:mapper/**/*.xml mybatis.configuration.map-underscore-to-camel-case = true ~~~     ycloans-agent-service ~~~shell application: spring.application.name = ycloans-pay-service spring.liquibase.enabled = false spring.liquibase.change-log = classpath:config/liquibase/master.xml spring.cloud.inetutils.preferred-networks = 10 spring.cloud.inetutils.ignored-interfaces = lo,lo:0 spring.jackson.serialization.INDENT_OUTPUT = true spring.datasource.driver-class-name = oracle.jdbc.OracleDriver spring.datasource.type = com.zaxxer.hikari.HikariDataSource spring.datasource.url = jdbc:oracle:thin:@10.162.1.57:1521:orcl spring.datasource.username = ycloanspay spring.datasource.password = ycloanspay spring.datasource.hikari.minimum-idle = 2 spring.datasource.hikari.maximum-pool-size = 2 spring.datasource.hikari.data-source-properties.cachePrepStmts = true spring.datasource.hikari.data-source-properties.prepStmtCacheSize = 250 spring.datasource.hikari.data-source-properties.prepStmtCacheSqlLimit = 2048 spring.datasource.hikari.data-source-properties.useServerPrepStmts = true spring.messages.cache-duration = 1 ############################################ #### ActiveMq 消息队列配置 ############################################ # 采用的消息队列类型: # 0-default,仅内存模拟 # 1-redisMq # 2-activeMq spring.mq.type = 2 # 消费通知方式 0-开启线程调用borker接口; 1-开启线程放入消息队列 # 如果此值被设置成1,则broker启动时需要开启监听通知结果的队列,队列命名 # 规则是: 业务对列:result reliable.message.consumer.notify.type = 1 reliable.message.consumer.notify.thread.corePerSize = 100 reliable.message.consumer.notify.thread.maxPerSize = 500 reliable.message.consumer.notify.thread.keepAliveTime = 500 reliable.message.consumer.notify.thread.blockingQueueSize = 500 test.activemq.net-address = 127.0.0.1 # spring.activemq.broker-url = tcp://10.162.1.245:61616 测试环境 spring.activemq.broker-url = tcp://10.162.1.100:61616 #spring.activemq.broker-url = tcp://activemq-net:61616 spring.activemq.user = admin spring.activemq.password = admin # 在考虑结束之前等待的时间 spring.activemq.close-timeout = 15s # 默认代理URL是否应该在内存中。如果指定了显式代理,则忽略此值。 spring.activemq.in-memory = false # 是否在回滚消息之前停止消息传递。这意味着当启用此命令时,消息顺序不会被保留。 spring.activemq.non-blocking-redelivery = false # 等待消息发送响应的时间。设置为0等待永远。 spring.activemq.send-timeout = 0 spring.activemq.queue-name = CommonPaySendQueue spring.activemq.response-queue-name = CommonPayResultQueue spring.activemq.topic-name = abc spring.activemq.respone-topic-name = abc # 表示使用Topic模式还是queue模式,默认使用topic模式 spring.activemq.toTopic = true spring.pool.enabled = true spring.pool.max-connections = 10 spring.pool.idle-timeout = 30000 #默认情况下activemq提供的是queue模式,若要使用topic模式需要配置下面配置 spring.jms.pub-sub-domain = true ############################################ #### 业务参数配置 ############################################ moneyPay.pay = http://10.162.4.92:8080/paybatch/receipt/order11 moneyPay.qry = http://10.162.4.92:8080/paybatch/receipt/query11 moneyPay.notify = http://10.162.4.92:8080/paybatch/receipt/batch/state/notify11 ############################################ #### 注册中心 配置 ############################################ eureka.instance.prefer-ip-address = true eureka.instance.instanceId = ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port} eureka.instance.lease-renewal-interval-in-seconds = 5 eureka.instance.lease-expiration-duration-in-seconds = 10 eureka.instance.status-page-url-path = /management/info eureka.instance.health-check-url-path = /management/health eureka.instance.metadata-map.profile = ${spring.profiles.active} eureka.instance.metadata-map.version = ${info.project.version} eureka.client.service-url.defaultZone = http://10.162.1.76:8761/eureka/,http://10.162.1.100:8762/eureka/ eureka.client.enabled = true eureka.client.healthcheck.enabled = true eureka.client.fetch-registry = true eureka.client.register-with-eureka = true eureka.client.instance-info-replication-interval-seconds = 10 eureka.client.registry-fetch-interval-seconds = 10 ~~~  ycloans-common-reliable-message ~~~shell EUREKA: eureka.instance.prefer-ip-address = true eureka.instance.instanceId = ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port} eureka.instance.lease-renewal-interval-in-seconds = 5 eureka.instance.lease-expiration-duration-in-seconds = 10 eureka.instance.status-page-url-path = /management/info eureka.instance.health-check-url-path = /management/health eureka.instance.metadata-map.profile = ${spring.profiles.active} eureka.instance.metadata-map.version = ${info.project.version} eureka.client.service-url.defaultZone = http://10.162.1.76:8761/eureka/,http://10.162.1.100:8762/eureka/ eureka.client.enabled = true eureka.client.healthcheck.enabled = true eureka.client.fetch-registry = true eureka.client.register-with-eureka = true eureka.client.instance-info-replication-interval-seconds = 10 eureka.client.registry-fetch-interval-seconds = 10 -------------------------------- ActiveMq: ############################################ #### ActiveMq 消息队列配置 ############################################ # 采用的消息队列类型: # 0-default,仅内存模拟 # 1-redisMq # 2-activeMq spring.mq.type = 2 # 消费通知方式 0-开启线程调用borker接口; 1-开启线程放入消息队列 # 如果此值被设置成1,则broker启动时需要开启监听通知结果的队列,队列命名 # 规则是: 业务对列:result reliable.message.consumer.notify.type = 1 reliable.message.consumer.notify.thread.corePerSize = 100 reliable.message.consumer.notify.thread.maxPerSize = 500 reliable.message.consumer.notify.thread.keepAliveTime = 500 reliable.message.consumer.notify.thread.blockingQueueSize = 500 test.activemq.net-address = 127.0.0.1 # spring.activemq.broker-url = tcp://10.162.1.245:61616 测试环境 spring.activemq.broker-url = tcp://10.162.1.100:61616 #spring.activemq.broker-url = tcp://activemq-net:61616 spring.activemq.user = admin spring.activemq.password = admin # 在考虑结束之前等待的时间 spring.activemq.close-timeout = 15s # 默认代理URL是否应该在内存中。如果指定了显式代理,则忽略此值。 spring.activemq.in-memory = false # 是否在回滚消息之前停止消息传递。这意味着当启用此命令时,消息顺序不会被保留。 spring.activemq.non-blocking-redelivery = false # 等待消息发送响应的时间。设置为0等待永远。 spring.activemq.send-timeout = 0 spring.activemq.queue-name = aa:pay:mock spring.activemq.response-queue-name = aa:pay:mock:result # 表示使用Topic模式还是queue模式,默认使用topic模式 spring.activemq.toTopic = true spring.pool.enabled = true spring.pool.max-connections = 10 spring.pool.idle-timeout = 30000 #默认情况下activemq提供的是queue模式,若要使用topic模式需要配置下面配置 spring.jms.pub-sub-domain = true # 是否信任所有包 #spring.activemq.packages.trust-all= # 要信任的特定包的逗号分隔列表(当不信任所有包时) #spring.activemq.packages.trusted= # 当连接请求和池满时是否阻塞。设置false会抛“JMSException异常”。 #spring.activemq.pool.block-if-full=true # 如果池仍然满,则在抛出异常前阻塞时间。 #spring.activemq.pool.block-if-full-timeout=-1ms # 是否在启动时创建连接。可以在启动时用于加热池。 #spring.activemq.pool.create-connection-on-startup=true # 是否用Pooledconnectionfactory代替普通的ConnectionFactory。 #spring.activemq.pool.enabled=false # 连接过期超时。 #spring.activemq.pool.expiry-timeout=0ms # 连接空闲超时 #spring.activemq.pool.idle-timeout=30s # 连接池最大连接数 #spring.activemq.pool.max-connections=1 # 每个连接的有效会话的最大数目。 #spring.activemq.pool.maximum-active-session-per-connection=500 # 当有"JMSException"时尝试重新连接 #spring.activemq.pool.reconnect-on-exception=true # 在空闲连接清除线程之间运行的时间。当为负数时,没有空闲连接驱逐线程运行。 #spring.activemq.pool.time-between-expiration-check=-1ms # 是否只使用一个MessageProducer #spring.activemq.pool.use-anonymous-producers=true -------------------------------------------------------- YCLOANS-PUBLIC: license.licenseContext = <?xml version="1.0" encoding="UTF-8"?><license build-time="Mon May 06 11:39:46 CST 2019" validate-code="FC6107A40B8E7CF356B4EC5CC39A9CA6"><element name="license_code">0000011874</element><element name="product_code">0000001122</element><element name="product_name_zh-cn">宇信科技基于微服务框架统一开发平台</element><element name="product_name_en-us">YUSP</element><element name="version_major">1</element><element name="version_sub">0</element><element name="version_publish">1</element><element name="complie_date">2018-03-20</element><element name="license_type">内部试用许可证</element><element name="customer_name"/><element name="contract_code"/><element name="license_start_time">2019-05-06</element><element name="license_end_time">2119-06-01</element></license> license.licenseModel = TRIAL management.health.rabbit.enabled = false management.health.ycloansmq.enabled = true management.endpoints.web.base-path = /api/system/actuator management.endpoint.health.show-details = always management.endpoints.web.exposure.include = * management.security.enabled = false swagger.enabled = true swagger.title = YUSP APP ycloans-starter Application API swagger.description = YUSP APP ycloans-starter API documentation swagger.version = 2.1.1.RELEASE spring.liquibase.enabled = false spring.liquibase.change-log = classpath:config/liquibase/master.xml spring.cloud.inetutils.preferred-networks = 172.20.* spring.jackson.serialization.INDENT_OUTPUT = true spring.messages.cache-duration = 1 pagehelper.helperDialect = mysql pagehelper.reasonable = true mapper.mappers[0] = cn.com.yusys.yusp.commons.mapper.CommonMapper ---------------------------------------------------------------------- MYSQL: ###################################### ## MYSQL数据库配置 ###################################### spring.datasource.url = jdbc:mysql://10.162.1.102:3306/apolloconfigdb?useUnicode=true&characterEncoding=utf8&useSSL=false spring.datasource.username = apollo spring.datasource.password = apollo spring.datasource.hikari.minimum-idle = 20 spring.datasource.hikari.maximum-pool-size = 500 spring.datasource.hikari.data-source-properties.cachePrepStmts = true spring.datasource.hikari.data-source-properties.prepStmtCacheSize = 250 spring.datasource.hikari.data-source-properties.prepStmtCacheSqlLimit = 2048 spring.datasource.hikari.data-source-properties.useServerPrepStmts = true # 特别注意此处,否则存储mysql将无效 mybatis.mapperLocations = classpath*:mapper/**/*.xml mybatis.configuration.map-underscore-to-camel-case = true ~~~  #### **Eureka配置:**  Eureka注册主要在本地(服务:pay/ agent/ nc*)进行配置,如下: ~~~shell [root@mysql01 ycloans-pay-service]# pwd /home/hxusr/ap/app/ycloans-pay-service [root@mysql01 ycloans-pay-service]# ls bootstrap.yml config-cache nohup.out out1130.log out.log robotcenter.sh ycloans_app.jar ycloans_app.jar.1 ycloans_app.jar4 [root@mysql01 ycloans-pay-service]# cat bootstrap.yml spring: application: name: ycloans-pay-service #应用名 集群名 liquibase: enabled: false change-log: "classpath:config/liquibase/master.xml" server: port: 6002 #应用启动端口 app: id: ycloans-pay-service # Apollo集群名称 apollo: meta: http://10.162.1.76:9001 #meta: http://10.162.1.102:9081/ cluster: SIT #环境 cacheDir: ../apollo/ #apollo配置文件存放目录 bootstrap: enabled: true namespaces: application,EUREKA,YCLOANS-PUBLIC,ACTIVE_MQ # 命名空间注意:namespace 和 namespaces。 # 日志相关 logging: path: ../logs #日志文件路径 file: ${spring.application.name}_${server.port}.log #日志文件名称 level: root: INFO springfox.documentation.spring.web.readers.operation: OFF #springfox日志关闭输出 #actuator监控配置 management: health: rabbit: enabled: false # 停启 脚本: robotcenter.sh # 日志 : out.log ------------------------------------------------------------- [root@peer1-dev ~]# cd /home/ap/app/mock/order/ [root@peer1-dev order]# ls bootstrap.yml logs out.log robotcenter.sh ycloans_app.jar [root@peer1-dev order]# cat bootstrap.yml spring: application: name: ycloans-common-reliable-message-mock-order #应用名称 liquibase: enabled: false change-log: "classpath:config/liquibase/master.xml" server: port: 18814 #应用启动端口 test: apollo: env: SIT log: level: INFO app: id: ycloans-common-reliable-message apollo: #meta: http://10.200.10.13:9001 # 湖北消金的配置 #meta: http://10.162.1.102:9081 # 北银消金的配置 meta: http://10.162.1.76:9001 cluster: ${test.apollo.env} #集群名称 cacheDir: ../apollo/ #apollo配置文件存放目录 bootstrap: enabled: true namespaces: application,YCLOANS-PUBLIC,EUREKA,UNDERTOW,LOAD_BALANCE,LEVEL_CACHE,MYSQL,ACTIVE_MQ # 日志相关 logging: path: ./logs #日志文件路径 file: ${spring.application.name}_${server.port}.log #日志文件名称 level: root: ${test.log.level} springfox.documentation.spring.web.readers.operation: OFF #springfox日志关闭输出 #actuator监控配置 management: health: rabbit: enabled: false ~~~ ### 2. 避坑指南 统一开发平台的配置会有影响,导致启动报错,原因未知,如果不用请删除  *** # Eureka安装 ### 安装包位置: G:\宇信\北银核算\项目文档\北银核算\包 eureka.zip 两台服务器互相注册: ### 配置hosts文件: ~~~shell ## 两台都要配: [root@hexin2 eureka]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.162.1.100 peer2-dev 10.162.1.76 peer1-dev ~~~ ### 配置76: ~~~shell ## 上传解压: [root@peer1-dev ~]# cd eureka eureka/ eureka.zip [root@peer1-dev ~]# cd eureka [root@peer1-dev eureka]# ls application.yml ncloan-registry-server-eureka.log startup-peer4-dev.sh ncloan-registry-server-eureka.jar startup-peer1-dev.sh ~~~ ##### 配置application.yml: ~~~shell [root@peer1-dev eureka]# cat application.yml eureka: client: #是否要注册到其他Eureka Server实例 register-with-eureka: true #是否要从其他Eureka Server实例获取数据 fetch-registry: true service-url: defaultZone: http://peer1-dev:8761/eureka/,http://peer2-dev:8762/eureka/ instance: prefer-ip-address: true #将自己的ip地址注册到Eureka服务中 #服务过期时间配置,默认90s lease-expiration-duration-in-seconds: 30 #租期更新时间间隔 lease-renewal-interval-in-seconds: 10 server: #启用主动失效,并且每次主动失效检测间隔为3s eviction-interval-timer-in-ms: 3000 # 关闭自我保护机制,保证不可用服务及时踢出 enable-self-preservation: false spring: application: name: servers-eureka logging: level: com.netflix.eureka: OFF com.netflix.discovery: OFF --- spring: #指定profile=peer1_dev profiles: peer1-dev server: port: 8761 eureka: instance: #指定当profile=peer1_dev时,主机名是peer1_dev hostname: peer1-dev --- spring: #指定profile=peer2 profiles: peer2-dev server: port: 8762 eureka: instance: #指定当profile=peer2_dev时,主机名是peer2_dev hostname: peer2-dev ~~~ ##### 启动脚本:startup-peer1-dev.sh ~~~shell [root@peer1-dev eureka]# vim startup-peer1-dev.sh 注意必须:jdk1.8 #!/bin/bash nohup /usr/local/java1.8/bin/java -jar -Dfile.encoding=UTF-8 -Dapollo.bootstrap.enabled=false ncloan-registry-server-eureka.jar --spring.profiles.active=peer1-dev --spring.config.location=application.yml > ncloan-registry-server-eureka.log 2>& 1 & ~~~ ### 配置100: ~~~shell 上传解压: [root@hexin2 ~]# cd eureka eureka/ eureka.zip [root@hexin2 ~]# cd eureka [root@hexin2 eureka]# ll application.yml ncloan-registry-server-eureka.log startup-peer4-dev.sh ncloan-registry-server-eureka.jar startup-peer2-dev.sh ~~~ ##### 配置application.yml: ~~~shell [root@hexin2 eureka]# cat application.yml eureka: client: #是否要注册到其他Eureka Server实例 register-with-eureka: true #是否要从其他Eureka Server实例获取数据 fetch-registry: true service-url: defaultZone: http://peer2-dev:8762/eureka/,http://peer1-dev:8761/eureka/ instance: prefer-ip-address: true #将自己的ip地址注册到Eureka服务中 #服务过期时间配置,默认90s lease-expiration-duration-in-seconds: 30 #租期更新时间间隔 lease-renewal-interval-in-seconds: 10 server: #启用主动失效,并且每次主动失效检测间隔为3s eviction-interval-timer-in-ms: 3000 # 关闭自我保护机制,保证不可用服务及时踢出 enable-self-preservation: false spring: application: name: servers-eureka logging: level: com.netflix.eureka: OFF com.netflix.discovery: OFF --- spring: #指定profile=peer1_dev profiles: peer1-dev server: port: 8761 eureka: instance: #指定当profile=peer1_dev时,主机名是peer1_dev hostname: peer1-dev --- spring: #指定profile=peer2 profiles: peer2-dev server: port: 8762 eureka: instance: #指定当profile=peer2_dev时,主机名是peer2_dev hostname: peer2-dev ~~~ ##### 配置启动脚本:startup-peer2-dev.sh ~~~shell [root@needyou eureka]# cat startup-peer2-dev.sh 注意必须:jdk1.8 #!/bin/bash nohup java -jar -Dfile.encoding=UTF-8 -Dapollo.bootstrap.enabled=false ncloan-registry-server-eureka.jar --spring.profiles.active=peer2-dev --spring.config.location=application.yml > ncloan-registry-server-eureka.log 2>& 1 & ~~~ *** # 时间同步: ntpdate time1.aliyun.com 需要外网环境! ntpdate 10.162.2.100 搭建内网时间服务器 10.162.2.100是唯一能连外网的服务器。作为内网的时间服务器。 主节点(时间服务器)10.162.2.100 ~~~shell # 查看是否安装 ntp 服务 [root@waiwang ~]# rpm -qa ntp ntp-4.2.2p1-15.el5 # 如果有、查看服务配置文件 [root@waiwang ~]# rpm -qc ntp /etc/ntp.conf /etc/ntp/keys /etc/ntp/step-tickers /etc/rc.d/init.d/ntpd /etc/sysconfig/ntpd # 没有则安装: [root@waiwang ~]# yum -y install ntp # 配置 [root@waiwang ~]# more /etc/ntp.conf # Permit time synchronization with our time source, but do not # permit the source to query or modify the service on this system. restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery # Permit all access over the loopback interface. This could # be tightened as well, but to do so would effect some of # the administrative functions. restrict 127.0.0.1 restrict -6 ::1 # Hosts on local network are less restricted. restrict 10.162.2.100 mask 255.255.0.0 nomodify notrap # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). server 0.rhel.pool.ntp.org server 1.rhel.pool.ntp.org server 2.rhel.pool.ntp.org #broadcast 192.168.1.255 key 42 # broadcast server #broadcastclient # broadcast client #broadcast 224.0.1.1 key 42 # multicast server #multicastclient 224.0.1.1 # multicast client #manycastserver 239.255.254.254 # manycast server #manycastclient 239.255.254.254 key 42 # manycast client # Undisciplined Local Clock. This is a fake driver intended for backup # and when no outside source of synchronized time is available. server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10 # Drift file. Put this in a directory which the daemon can write to. # No symbolic links allowed, either, since the daemon updates the file # by creating a temporary in the same directory and then rename()'ing # it to the file. driftfile /var/lib/ntp/drift # Key file containing the keys and key identifiers used when operating # with symmetric key cryptography. keys /etc/ntp/keys # Specify the key identifiers which are trusted. #trustedkey 4 8 42 # Specify the key identifier to use with the ntpdc utility. #requestkey 8 # Specify the key identifier to use with the ntpq utility. #controlkey 8 ~~~ 客户端: ~~~shell [root@hx245 ~]# yum -y install ntpdate [root@hx245 ~]# ntpdate 10.162.2.100 2 Dec 17:52:30 ntpdate[38066]: step time server 10.162.2.100 offset -26113.326900 sec [root@hx245 ~]# date Wed Dec 2 17:52:33 CST 2020 ~~~