说明一下这个是干嘛用的
Eureka 是 Netflix 出品的用于实现服务注册和发现的工具,Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现 Eureka采用C-S的设计架构,包含Eureka Server 和Eureka Client两个组件
它的原理就是基于服务提供者和服务消费者。像我们的orderservice需要去访问userservice,那么userservice就是服务提供者,orderservice就是。服务消费者。
服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。
在默认配置中EurekaServer服务在一定时间(默认为90秒)没接受到某个服务的心跳连接后,EurekaServer会注销该服务。但是会存在当网络分区发生故障,导致该时间内没有心跳连接,但该服务本身还是健康运行的情况。Eureka通过“自我保护模式”来解决这个问题。 在自我保护模式中,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例。
我们可以对服务创建多个节点,如果有的节点挂掉以后,就可以去启用另外可用的服务。
当然这个是基于springcloud的。所以我们需要导入相关的依赖。
在这之前啊,我们需要将eureka服务端创建出来
我们再创建一个模块
打开这个pom文件添加必要依赖
然后创建启动类
一定要注意启动类要放在java目录的包下面,所以最好创建包后,将这个启动类放到下面,不要直接放在java目录下。
这里我们做的就是服务端。
即热是服务,那么我们还是要配置一下,比如端口等等,所以需要在resource下面创建一个yml文件。
一定要注意yml文件中字段的层级关系,这是非常严格的。
配置完这个后,我们需要配置客户端。 首先还是需要引入依赖。
useservice 和orderservice都需要导入。
另外需要配置服务端的地址
同样是都需要配置。 初步的话其实还有一定就是这里
我们需要指定一下服务名称。先这样配置一下,然后去启动
三者都启动
现在需要去访问一个地址
注意端口10086后不需要加eureka
我们现在需要去查看服务是否注册成功,或者说eureka服务端是否将userservice 和orderservice加入实例。
这样就成功了。
然后我们就可以开启去使用它了。 这里我们可以修改一下这里
但是在这之前,我们需要做一个负载均衡的指定,否则是无法解析服务地址。
然后这样
这样我们再次启动,就可以去访问了。
上面我们用到了负载策略
负载均衡是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。 注:图片数据来自知乎 什么是负载均衡 从这里可以去看负载均衡策略 没有负载均衡的服务架构
有负载均衡的服务架构
我们这样的特点可以去用多实例部署的特点。
一定要记得修改端口
将这个服务启动起来
然后我们去eureka注册中心看看有没有实例
可以看到userservice一共有两个实例对象了。 这样创建多实例的好处就是如果一个实例存在问题的话就可以换另一个。我们这里就模拟了多实例部署。
还有我们需要去观察一下这个负载均衡策略,其实默认是轮询的负载均衡策略。
我们可以去测试,多访问几次userservice,而现在userservice有两个实例,我们在postman测试工具做出测试,发出请求,看看具体调用的哪个实例。
注意现在需要改一个东西,就是上面有一个错误的地方。有关日志的。
logging.level设置日志级别,后面跟生效的区域,比如root表示整个项目,也可以设置为某个包下,也可以具体到某个类名(日志级别的值不区分大小写)这里需要注意,上面的包名没有写对。
然后开始测试,首先将控制台的输出全部清除掉。
我这里从1到6一共访问6次。
然后来看控制台的日志输出,可见这是轮询的方式
默认的是轮询,我们可以自己去指定一个规则
所以就从这里来重新指定规则
我们在orderservice的启动类里面写,当然这个是代码的方式。并且,我们需要将它做成一个bean。
我们这样定义是选择了随机的原则,代表随机选择一个服务器。 然后我们去重新启动测试
测试成功
如果采用配置文件的方式
两者配置不同之处在于作用范围。代码配置的话就是会在全部服务中起作用,而配置文件配置的话就只会在指定的服务起作用。
还有一个就是关于启动问题的知识点,默认是懒加载。
我们这样去配置