1.实现服务提供者集群
- 在上一篇博客中,我们只是在消费者端集成了ribbon,但是并没有明显的感受到ribbon的作用,原因是因为我们的服务提供者只有一个,不是集群,ribbon不能进行负载均衡,所以为了测试ribbon的功能,我们需要实现服务提供者的集群
- 现在已有的服务提供者端口为8001,扩展两个服务提供者8002和8003,但是需要注意:前面在编写服务消费者的时候虽然模块名称上写的是80端口,但是在实际使用的时候发现80端口已经被占用,所以改成使用其他端口,就改成了8002端口,这就和下面要实现的一个注册服务提供者的端口冲突了,所以决定将消费者端口改为9001,模块名称上还是保留80
- 首先创建两个服务者模块的数据库,和第一个服务者的数据库除了名字以外以他的都相同
- 直接将db1数据库导出备份,获取到创建的sql语句
- 通过标识db_source可以知道这一条数据到底来自哪一个数据库
- 创建了数据库就要去创建对应的服务提供者子model
- 导入依赖,和8001相同
<dependencies> <!--eureka完善对应服务的监控信息依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!--eureka的服务提供者的依赖--> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.7.RELEASE</version> </dependency> <!--实体类dept依赖--> <dependency> <groupId>com.thhh</groupId> <artifactId>springcould-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!--单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <!--数据库依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <!--logback依赖,讲解:https://zhuanlan.zhihu.com/p/136893269--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </dependency> <!--mybatis依赖--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <!--spring boot的web启动器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--spring boot的测试依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> <!--jetty--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <!--热部署依赖:写完项目之后可以不重启项目,而是刷新一下就可以更新最新改动的资源到项目中--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies>
- 编写8002和8003的配置文件,可以直接粘贴8001的配置文件,然后进行对应的修改
- 由于是服务提供者,所以它有完整的MVC 3层架构,所以我们需要将这部分的代码也复制粘贴到8002和8003中
- 每个子model中的入口程序需要进行对应的修改
- 启动集群进行测试
- 注意:先开注册中心,这里先开一个注册中心,然后启动服务提供者集群,最后再启动消费者
- 可见,注册中心已经接受到了同一个服务名称的3个服务提供者注册的服务的集群,在监控页面显式的就是同一个注册名称后面的Status字段有3个不同的instanceid展示,点击访问可以看到3个集群的服务
- 启动消费者,访问它的controller提供的API,查看展示的数据和只有一个服务者的时候有什么区别
- 可以从上面结果看出ribbon默认实现的负载均衡是轮询
- 注意:前面我们做了注册中心的集群是为了注册中心的高可用,当一个注册中心崩了服务还能使用其他注册中心提供的服务继续使用;现在我们做了提供者的集群,这是为了服务提供者提供的服务的高可用,当一个服务者崩了,集群中的其他服务者还可以顶上继续提供正常的服务
- 其中,ribbon是用于在消费者请求服务提供者提供的服务的时候实现负载均衡