第三篇:Spring Cloud client服务集群
1.为什么要集群?
eureka client相当于一个订单项目 放在tomcat中。
客户端-->Nginx-->Zuul-->eureka client ,当(eureka client)在单节点的情况下,如果宕机,会影响到客户使用,这个时候需要一个备胎做替补。
【奇思妙想】
可以把马路当作一个模块【订单模块的class文件】,而路灯是tomcat,我在马路上操作的时候,你的路灯得亮着,也就是tomcat得是运行状态。
如果你只有一个tomcat在运行,那么当路灯由于天气或者人为情况导致灭了,那么作为客户就不能在马路上行走。
但是如果你一条马路上是有多个路灯,那么就有很好的替补机制,一个坏了没事,还有其他的路灯亮着,不影响人在路上行走。
把马路看成模块,多条马路构建一个区域,这个区域就是系统,一个完整的生态圈。
代码演示:
package com.cohesion.rest; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class OrderController { @Value("${server.port}") private String port; @Value("${spring.application.name}") private String serviceName; @RequestMapping(value="/order/helloWord") public String helloWord() { String returnStr = "您访问的是:【"+serviceName+"】服务,【端口号】"+port; return returnStr; } }
返回结果
如果这个order服务的8081端口服务挂了,那么客户端去请求order【订单服务】的时候,就会出现异常。做的好的用【断路器Hystrix】,来进行没必要的资源浪费和等待。
但是【断路器Hystrix】只能起到提供友好的客户体验和节省资源浪费&客户等待时间,并不能让客户继续操作下去。
这个时候就需要集群来弥补这个操作,也就是服务从单节点变成多节点,当一个节点出现问题,会自动转发到没问题的节点中。从而让客户能继续在系统上操作。不过可能会出现慢的问题,这个时候就需要提供一个服务报警的功能,让运维人员知道情况,安排工程师去解决损坏的节点。
现在我们来配置多个order模块。我的方法还是创建order项目,只是端口不一样。IDEA可以直接把一个项目配置成多个端口,如果用IDEA可以这样搞。
如项目结构图,order是2个项目,已8081,一个是8082端口的服务,切换到注册中心服务,发现有2发order服务注册进来了。
下一篇构建zuul路由项目,来演示多节点服务宕机,系统还能运行的案例。