SpringCloud Eureda入门案例

SpringCloud Eureda是SpringCloud Netflix微服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的服务治理功能。SpringCloud通过为Eureka增加了SpringBoot风格的自动化配置,我们只需要通过简单引入依赖和注解配置就能让SpringBoot构建的微服务应用轻松地与Eureka服务治理进行整合

SpringCloud Eureda简单入门案例
环境:Intellij IDEA、SpringCloud Eureda、Maven
三个项目:服务注册中心、服务提供者、服务消费者
1.构建服务注册中心
a.新建project
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

b.由于勾选了Eureka Server,所以项目中的pom.xml不用做任何修改

c.在SpringBoot的入口类中增加@EnableEurekaServer
这里写图片描述

d.编辑src/main/resources/application.properties文件

server.port=1111                            #注册中心的端口
eureka.instance.hostname=localhost          #注册中心的主机地址
eureka.client.register-with-eureka= false   #false代表不向注册中心注册自己
eureka.client.fetch-registry= false         #false代表不去检索服务
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/ #访问地址

e.启动注册中心,无需配置,点击即可启动。
这里写图片描述
f.在地址栏中输入localhost:1111,点出回车,就可以访问注册中心
这里写图片描述
单节占的注册中心构建完成
以下步骤,尝试构建双节点的高可用服务注册中心的集群
g.在src/main/resources/文件夹中创建application-eureka1.application,编辑代码

spring.application.name=eureka-server
server.port=1111
eureka.instance.hostname=eureka1
eureka.client.service-url.defaultZone=http://eureka2:1112/eureka/

h.在src/main/resources/文件夹中创建application-eureka2.application,编辑代码

spring.application.name=eureka-server
server.port=1112
eureka.instance.hostname=eureka2
eureka.client.service-url.defaultZone=http://eureka1:1111/eureka/

i.编辑C:\Windows\System32\drivers\etc\hosts文件,增加
127.0.0.1 eureka1
127.0.0.1 eureka2

j. 通过spring.pfofiles.active属性来分别启动eureka1、eureka2
(1)进行项目的保存路径
这里写图片描述

(2)在地址栏中输入cmd,并按回车键
这里写图片描述

(3)在弹出的窗口中输入mvn -version,查看maven的版本,如果没有安装,请自行百度并完成安装
这里写图片描述

(4)在窗口中输入mvn install,如上图所示,点击回车键,可将项目打包成jar包保存在target文件夹中,出现“BUILD SUCCESS”,代表打包完成
这里写图片描述
(5)打开target文件夹,以(2)步骤中的方式打开cmd窗口,输入
java -jar eurekaserver-0.0.1-SNAPSHOT.jar –spring.profiles.active=eureka1
启动eureka1节点
以(2)步骤中的方式再次打开一个新的cmd窗口,输入
java -jar eurekaserver-0.0.1-SNAPSHOT.jar –spring.profiles.active=eureka2
启动eureka2节点
(6)在浏览器地址栏中输入eureka1:1111可访问eureka1节点,输入eureka2:1112可访问eureka2节点,eureka1节点如下图
这里写图片描述

至此,双节点高可用服务注册中心的集群构建完成

2.构建服务提供者
a.按照1.a中的步骤新建eureka-provider,模块勾选Web和Eureka Server
b.无需修改pom.xml
c.编辑src/main/resources/application.propertire文件,增加如下内容

spring.application.name=hello-service   #服务提供者的名称
eureka.client.service-url.defaultZone=http://eureka1:1111/eureka,http://eureka2:1112/eureka #分别注册到两个节点中

d.在与 EurekaConsumerApplication.java文件的同目录下新建名为web的包,并新建一个HelloController.java文件,目录结构如图
这里写图片描述
e.编辑HelloController文件

package com.example.demo.web;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    private final Logger logger=Logger.getLogger(getClass());
    @Autowired
    private DiscoveryClient discoveryClient;
    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String hello(){
        ServiceInstance instance=discoveryClient.getLocalServiceInstance();
    //在控制台中输出内容             logger.info("/hello,host:"+instance.getHost()+",service_id:"+instance.getServiceId());
        return "hello world";
    }
}

f.在EurekaProviderApplication文件的增加@EnableDiscoveryClient,如图
这里写图片描述

g.无需配置,直接启动应用
h.应用启动后,服务提供者就会注册到服务注册中心,可在服务注册中心查看
这里写图片描述

h.为了实验ribbon的客户端负载均衡功能,可以通过java -jar命令行的方式启动两个不同端口的服务提供者应用
进行项目保存目录中,运行cmd,执行mvn install。然后进行target文件中,打开两个cmd窗口
一个窗口中执行java -jar eurekaprovider-0.0.1-SNAPSHOT.jar –server.port=8081
另一个执行java -jar eurekaprovider-0.0.1-SNAPSHOT.jar –server.port=8082
即在8081和8082端口分别运行一个服务提供者应用
这里写图片描述

3.构建服务消费者
a.如1.a中步骤构建eureka-consumer,勾选web、eureka server和ribbon模块
b.无需修改pom.xml文件
c.编辑src/main/resources/application.propertire文件,增加如下内容

spring.application.name=ribbon-consumer         #服务消费者名称 
server.port=9000                                #服务消费者运行端口
eureka.client.service-url.defaultZone=http://localhost:1111/eureka    #在注册中心的注册位置

d.在与 EurekaProviderApplication.java文件的同目录下新建名为web的包,并新建一个ConsumerController.java文件,代码如下

package com.example.demo.web;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class ConsumerController {
    @Autowired
    RestTemplate restTemplate;
    @RequestMapping(value="/ribbon-consumer",method = RequestMethod.GET)
    public String helloConsumer(){
        return restTemplate.getForEntity("http://HELLO-SERVICE/hello",String.class).getBody();
    }
}

e.修改 EurekaProviderApplication.java文件,增加@EnableDiscoveryClient注解
这里写图片描述
新增如下代码

    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate();
    }

f.启动应用,可在注册中心查看
这里写图片描述

g.访问localhost:9000/ribbon-consumer,成功返回”hello world”
这里写图片描述
我们可以在ribbon-consumer应用的控制台中,看到当前客户端维护的HELLO-SERVICE的服务列表情况。其中包含了各个实例的位置,ribbon就是按照此信息进行轮询访问,以实现基于客户端的负载均衡。

h.Eureka Server的自我保护机制
在本地调试基于Eureka的程序时,基本上都会碰到这样一个问题,在服务注册中心的信息面板上出现类似下面的红色警告信息
这里写图片描述
实际上,该警告就是触发了Eureka Server的自我保护机制。服务注册到Eureka Server之后,会维护一个心跳连接,告诉Eureka Server自己还活着。Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况(在单机高度的时候很容易出现,实际在生产环境上通常是由于网络不稳定导致),Eureka Server会将当前的实例注册信息保护起来,让这些实例不会过期,尽可能保护这些注册信息。但是,在保护期间内实例若出现问题,那么客户端很容易拿到实际已经不存在的服务实例,会出现调用失败的情况,所以客户端必须有容错机制,比如可以使用请求重试、断路器等机制。在本地进行开发的时候,可以使用eureka.server.enable-self-preservation=false参数来关闭保护机制,以确保注册中心可以将不可用的实例正确剔除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值