Spirng Cloud Netfilx

Eureka组件

Eureka是Netfilx开源的服务发现组件,本身是一个基于rest的服务,它包含client和server两部分。
Spirng Cloud将它集成在子项目Spirng Cloud Netfilx中,从而实现服务的注册和发现

1.eureka中的server和client的介绍及特点

Eureka Server:提供服务发现的能力,各个微服务启动时,会向Eureka Server注册自己的信息例如(IP,端口
号,服务名称等),Eureka会存储这些信息
Eureka Client:是一个java的客户端用来简化Eureka Server的交互
微服务启动后会周期性的(默认30秒)向Eureka Server发送心跳,如果Eureka在规定的时间没有收到心跳,
则会注销该实例(默认90秒)
Eureka Client会缓存服务注册表中的信息。这种方式有一定的优势首先可以降低Eureka Server的压力,其次
当所有的Eureka Server宕机服务调用方依然可以完成调用

2.服务注册与服务发现

服务注册:当微服务client启动时,向Eureka Server发起注册,并上报该节点的相关信息
服务发现:client从Eureka Server获取注册信息,然后发起调用

3.Eureka Server开发

1.引入springcloud的相关依赖
主项目引入

 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

Eureka Server pom

  <!--eureka server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

2.入口类的开发

//@EnableDiscoveryClient //不仅支持Eureka作为注册中心还支持zookeeper
@EnableEurekaServer //只支持Eureka
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }

}

3.配置文件

# 应用名称
spring.application.name=eureka-server
#端口号
server.port=8761
#开启IP优先
eureka.instance.prefer-ip-address=true
#设置eureka server 的交互地址,之后的服务获取和服务注册都需要依赖于这个地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
#表示是否将自己注册到eureka上
eureka.client.register-with-eureka=false
#表示是否从eureka server上获取注册信息
eureka.client.fetch-registry=false
4.Eureka Client 服务消费者

1.pom

 <!--eureka-client-->
 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
 </dependency>

2.入口类

@EnableEurekaClient
@SpringBootApplication
public class EurekaConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaConsumerApplication.class, args);
    }

}

3.配置文件

# 应用名称
spring.application.name=eureka-consumer
# 应用服务 WEB 访问端口
server.port=8762
#开启IP优先
eureka.instance.prefer-ip-address=true
#开启注册
eureka.client.register-with-eureka=true
#开启抓取
eureka.client.fetch-registry=true
#注册地址
#注册中心的地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

5.Eureka Client 提供者

eureka-producter-client1
1.pom

<!--eureka-client-->
	<dependency>
	      <groupId>org.springframework.cloud</groupId>
	      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
	  </dependency>

2.入口类

@SpringBootApplication
@EnableEurekaClient
public class EurekaProducterClient1Application {

    public static void main(String[] args) {
        SpringApplication.run(EurekaProducterClient1Application.class, args);
    }

}

3.配置文件

eureka.client.service-url.defaultZone=http://localhost:8761/eureka
spring.application.name=eureka-producter
server.port=8763

创建服务提供者2eureka-producter-client2 port改为8764

6.Eureka的健康监测
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-actuator</artifactId>
 </dependency>
management.endpoint.health.show-details=always

访问 http://localhost:8762/actuator/health

7.openfeign远程调用

1.pom

  <!--openfeign-->
   <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-openfeign</artifactId>
   </dependency>
    <!--netflix-hystrix-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

2.入口类

@EnableEurekaClient
@EnableFeignClients
@EnableHystrix
@SpringBootApplication
public class EurekaConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaConsumerApplication.class, args);
    }

}

3.配置文件

#日志
logging.level.com.example.eurekaconsumer.feign.TestFeign=debug
#为feign开启断路器
feign.hystrix.enabled=true

4.openfeign服务类

@Component
@FeignClient(value = "EUREKA-PRODUCTER",fallback = FeignClientFallBack.class)
public interface TestFeign {
    @RequestMapping("/feign/test")
    String testFeign(@RequestParam("name") String name);
}

5.服务降级

@Component
public class FeignClientFallBack implements TestFeign{
    @Override
    public String testFeign(String name) {
        return "Fallback相当于是降级操作 服务降级处理是在客户端实现完成的!"+name;
    }
}

6.服务提供类接口
eureka-producter-client1

@RestController
@RequestMapping("feign")
public class FeignController {
    @RequestMapping("test")
    public String test(String name){
        System.out.println("===================");
        return "hello client 8763:"+name;
    }
}

eureka-producter-client2

@RestController
@RequestMapping("feign")
public class FeignController {
    @RequestMapping("test")
    public String test(String name){
        return "hello client 8764:"+name;
    }
}
7Ribbon负载均衡

Ribbon 的负载均衡策略

RoundRobinRule 轮训策略 按顺序循环选择 Server
RandomRule 随机策略 随机选择 Server
AvailabilityFilteringRule 可用过滤策略 会先过滤由于多次访问故障而处于断路器跳闸状态的服
务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问
WeightedResponseTimeRule 响应时间加权策略 根据平均响应的时间计算所有服务的权重,响应时间越
快服务权重越大被选中的概率越高,刚启动时如果统计信息不足,则使用RoundRobinRule策略,等统计信息
足够会切换到
RetryRule 重试策略 先按照RoundRobinRule的策略获取服务,如果获取失败则在
制定时间内进行重试,获取可用的服务。
BestAviableRule 最低并发策略 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服
务,然后选择一个并发量最小的服务

默认为轮询策略
1.配置文件

EUREKA-PRODUCTER.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

3.测试
http://localhost:8762/feign/test?name=666

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值