所有的微服务应该将自己注册到注册中心,然后相互之间通过远程调用。使用注册中心统一管理微服务的访问地址,也便于其他服务,例如网关服务,无须记录每个微服务地址。

注意本地配置信息优先级最低,包括-Dserver.port

搭建Nacos

本项目使用阿里巴巴推出的Nacos作为注册中心和配置中心

使用Docker安装Nacos

docker pull nacos/nacos-server:1.2.0

创建容器

docker run --env MODE=standalone --name nacos --restart=always  -d -p 8848:8848 nacos/nacos-server:1.2.0
  • MODE=standalone 单机版

  • –restart=always 开机启动

  • -p 8848:8848 映射端口

  • -d 创建一个守护式容器在后台运行

访问地址:http://ip:8848/nacos

创建命名空间

进入到Nacos控制后台界面,分别创建下面两个命名空间:

命名空间名称:开发环境——学成在线
命名空间ID:learning-online-dev
描述:学成在线开发环境
命名空间名称:生产环境——学成在线
命名空间ID:learning-online-prod
描述:学成在线生产环境

创建配置信息

进入到Nacos控制后台界面,在右侧找到配置管理,点击配置列表,选择开发环境。

创建公共配置:logging-dev.yaml

  • ID:logging-dev.yaml

  • Group:learning-online-common

  • 描述:日志配置

  • 配置内容:

    logging-dev.yaml
    # 日志文件位置
    logging:
    config: classpath:log4j2-dev.xml

创建公共配置:logging-dev.yaml

  • ID:feign-dev.yaml

  • Group:learning-online-common

  • 描述:远程调用Feign配置

  • 配置内容:

    feign-dev.yaml
    feign:
    httpclient:
    enabled: true
    hystrix:
    enabled: true
    circuitbreaker:
    enabled: true

    hystrix:
    command:
    default:
    execution:
    isolation:
    #strategy: SEMAPHORE
    thread:
    timeoutInMilliseconds: 1000

    ribbon:
    ConnectTimeout: 60000 # 连接超时时间
    ReadTimeout: 60000
    MaxAutoRetries: 0
    MaxAutoRetriesNextServer: 1

创建消息队列配置:rabbitmq-dev.yaml

  • ID:rabbitmq-dev.yaml

  • Group:learning-online-common

  • 配置内容:

    rabbitmq-dev.yaml
    spring:
    rabbitmq:
    host: 124.221.23.47
    port: 5672
    username: swcode
    password: 123321
    virtual-host: /
    publisher-confirm-type: correlated #correlated 异步回调,定义ConfirmCallback,MQ返回结果时会回调这个ConfirmCallback
    publisher-returns: true #开启publish-return功能,同样是基于callback机制,需要定义ReturnCallback
    template:
    mandatory: true #定义消息路由失败时的策略。true,则调用ReturnCallback;false:则直接丢弃消息
    listener:
    simple:
    prefetch: 1 #每次只能获取一条消息,处理完成才能获取下一个消息
    acknowledge-mode: auto #auto:出现异常时返回unack,消息回滚到mq;没有异常,返回ack ,manual:手动控制,none:丢弃消息,不回滚到mq
    retry:
    enabled: false #开启消费者失败重试
    initial-interval: 5000ms #初识的失败等待时长为1秒
    multiplier: 1 #失败的等待时长倍数,下次等待时长 = multiplier * last-interval
    max-attempts: 3 #最大重试次数
    stateless: true #true无状态;false有状态。如果业务中包含事务,这里改为false

修改微服务工程

找到learning-online-parent父工程,添加版本信息:

pom.xml
<properties>
<spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>

重新启动微服务

重新启动后即可以在Nacos中看到服务列表: