昨天我作了Eureka-Server注册中心的集群,那么咱们知道在分布式架构中,最大的特色是微服务能够独立运行,每一个模块有本身独立的数据库mysql
今天,咱们来看下如何设置多个提供者,意思就是为了减轻数据库的压力,咱们能够建立多个相同的提供者,而且建立多个数据库(存放一样的数据)spring
经过消费者接口负载均衡策略对多个相同的提供者进行轮询访问sql
如何搭建eureka服务注册与发现,能够翻阅我以前的博客,以及Eureka Server 集群数据库
下面看下今天的功能步骤tomcat
一、首先默认建立两个相同的提供者mybatis
二、内部业务逻辑代码均可直接复制黏贴,包括pom.xml文件的依赖,mybatis全局配置文件,mapper映射文件架构
三、将yml文件复制过来后要注意更改当前提供者所须要的数据库信息,以及对应端口号等信息app
数据库中存放的数据应该是彻底相同的,但此处为了后期演示方便,我会对另一个数据库进行更改一条数据负载均衡
tx表中 的数据分布式
users表中的数据
#以前的一个提供者 server: port: 8001 #mybatis的设置 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路径 type-aliases-package: com.ghh.bean # 经过关系映射扫描全部bean别名类所在包 mapper-locations: classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: application: name: microservice-product #这个很重要,这在之后的服务与服务之间相互调用通常都是根据这个name #对外报漏的微服务名字,在服务注册中心中application下的字段值,eureka会自动变成全大写 datasource: type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操做类型 driver-class-name: com.mysql.cj.jdbc.Driver # mysql驱动包 url: jdbc:mysql://127.0.0.1:3306/users?serverTimezone=GMT%2B8 # 数据库名称 username: root password: root dbcp2: min-idle: 5 # 数据库链接池的最小维持链接数 initial-size: 5 # 初始化链接数 max-total: 5 # 最大链接数 max-wait-millis: 150 # 等待链接获取的最大超时时间 eureka: instance: instance-id: ${spring.application.name}:${server.port} #个人暴露名和端口号 prefer-ip-address: true #访问路径能够显示ip client: register-with-eureka: true #服务注册 true 注册到服务中心 fetchRegistry: true # true 获取注册信息 service-url: #注册到指定的注册中心或集群 defaultZone: http://Eureka7001.com:7001/eureka/,http://Eureka6001.com:6001/eureka/
#复制过来的yml更改
server:
port: 8002 #修改当前提供者的端口号
#mybatis的设置
mybatis:
config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路径
type-aliases-package: com.ghh.bean # 经过关系映射扫描全部bean别名类所在包
mapper-locations: classpath:mybatis/mapper/**/*.xml # mapper映射文件
spring:
application:
name: microservice-product #这个很重要,这在之后的服务与服务之间相互调用通常都是根据这个name
#对外报漏的微服务名字,在服务注册中心中application下的字段值,eureka会自动变成全大写
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操做类型
driver-class-name: com.mysql.cj.jdbc.Driver # mysql驱动包
url: jdbc:mysql://127.0.0.1:3306/tx?serverTimezone=GMT%2B8 # 数据库名称
username: root
password: root
dbcp2:
min-idle: 5 # 数据库链接池的最小维持链接数
initial-size: 5 # 初始化链接数
max-total: 5 # 最大链接数
max-wait-millis: 150 # 等待链接获取的最大超时时间
eureka:
instance:
instance-id: microserivce_cloud_07_provide_product_8002
prefer-ip-address: true #访问路径能够显示ip
client:
register-with-eureka: true #服务注册 true 注册到服务中心
fetchRegistry: true # true 获取注册信息
service-url: #注册到指定的注册中心或集群
defaultZone: http://Eureka7001.com:7001/eureka/,http://Eureka6001.com:6001/eureka/
四、修改完yml文件后,在消费者模块中,咱们须要修改以前的配置类,开启负载均衡,默认轮询的方式去访问不一样的提供者
此处切记必定不要忘记@LoadBalanced 注解,
Ribbo的负载均衡策略,@LoadBanlanced的默认是轮询,从服务列表中拿到一个服务对应的几个实例,对他们进行默认轮询访问。
@Configuration public class RestConfig { @Bean //经过RestTemplate来实现调用接口 @LoadBalanced //表示RestTemplate开启了负载均衡 public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
五、前面咱们配置的spring:application:name:会发现两个提供者是同样,此配置,是将当前模块姓名暴露给其余模块,
此时启动后会在server的服务中心看到多了一个此微服务,且后面有两个,Eureka会默认将咱们姓名变大写
注意:
此处切记咱们在yml文件中的 MICROSERVICE-PRODUCT 不能写成MICROSERVICE_PRODUCT,下划线Eureka是不支持的
六、此时至关于这两个相同功能的提供者都注册了,咱们在消费者接口经过RestTemplate调用
七、效果
八、小技巧,咱们在配置中须要其余地方的信息时,能够经过${}来获取,这样之后咱们再修改的时候,只要修改上面的信息就行
总结:轮询的方式说到底仍是为了缓解tomcat和mysql的压力,咱们之后开发分布式架构的项目时,各个微服务,不会放在同一个tomcat中,实现
完彻底全的解耦,因此Eureka经过服务注册中心,每个微服务启动后,到这来注册,经过心跳Server去监控每个微服务,对访问量比较大的地方
使用多个提供者,多个数据库,并在消费者接口处采用轮询的方式去减轻tomcat压力。
你们共同努力哈,共同努力进步