SpringCloud - 注册中心Eureka入门(一)

1.SpringCloud概述  

2.服务治理(服务的注册、发现)

2.1 Eureka 基本使用

2.1.1 EurekaServer

2.1.2 Eureka Client

 2.1.3 从eureka中获取ip和端口

2.1.4 eureka-instance 其他的配置

2.1.5 eureka-server 配置

2.1.6 eureka集群

2.2 Consul 的安装

2.2.1 consul 配置

2.2.2 consul pom配置

2.3 Nacos 

3.Ribbon 负载均衡

1.SpringCloud概述  

SpringCloud就是一些组件的集合,然后都用了spring boot的技术(相当于秦始皇统一度量衡),下面呢也就是介绍一下这些组件的用法,注意事项等。

2.服务治理(服务的注册、发现)

为什么要注册中心,看代码


@RestController
@RequestMapping("/findCon")
public class ConsumerCtl {
    @Autowired
    RestTemplate restTemplate;
    @GetMapping("/find/{id}")
    private CompanyInfo find(@PathVariable int id){
        //这边就是传统意义上调用其他方法的逻辑,这边还没有用到注册中心,如果改了就非常
        //耦合了,那有的人说放配置文件里面,其实也可以,只不过是从改代码和
        // 改配置文件的区别
        CompanyInfo ci =     restTemplate.getForObject("http://localhost:8888/company/findCompany/1", CompanyInfo.class);
        return ci;
    }
}

2.1 Eureka 基本使用

2.1.1 EurekaServer

启动类配置

@SpringBootApplication
//Eureka 服务端
@EnableEurekaServer
public class EurekaApp {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApp.class,args);
    }
}

配置文件

server:
  port: 8761
eureka:
  instance:
    hostname: localhost #主机名字

  client:
    service-url:
      defaultZone: http://${eureka.instance.hostname}}:${server.port}/eureka
      #注册地址
    register-with-eureka: false #注册到eureka上,但是我现在这个是server不需要注册
    fetch-registry: false #是否需要从eureka上拿路径

2.1.2 Eureka Client

把其他服务注册到eureka上

//客户端注册,这个注解可写可不写
@EnableEurekaClient
@SpringBootApplication
public class EurekaProvider {
    public static void main(String[] args) {
        SpringApplication.run(EurekaProvider.class,args);
    }
}

配置文件

eureka:
  instance:
    hostname: localhost #主机名字

  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
      #注册地址 注册到eureka
    register-with-eureka: true 
#注册到eureka上,但是我现在这个是server不需要注册,默认也是true
    fetch-registry: true #是否需要从eureka上拿路径,默认也是true可以不用写
spring:
  application:
    name: eureka-client
#注册到eureka上的app名字

pom文件

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

最后的结果就是这样

 2.1.3 从eureka中获取ip和端口

import org.springframework.cloud.client.discovery.DiscoveryClient;
@Autowired
DiscoveryClient discoveryClient;
private CompanyInfo find(@PathVariable int id){
        //下面可以从eureka上获取服务的地址
        List<ServiceInstance> instances = discoveryClient.getInstances("EUREKA-CLIENT");
        String url = "http://"+instances.get(0).getHost()+":"+instances.get(0).getPort()+"/company/findCompany/1";
        CompanyInfo ci = restTemplate.getForObject(url,
                CompanyInfo.class);
        return ci;
}

2.1.4 eureka-instance 其他的配置

这边还是配置文件里关于eureka-instance下的其他的配置。这部分可以了解一下不是很重要。

eureka:
  instance:
    hostname: localhost #主机名字
    prefer-ip-address: true #ip地址不以localhost显示
    ip-address: 127.0.0.1 # 显示的IP地址
    #这边实例的地址
    instance-id: ${eureka.instance.ip-address}:${spring.application.name}:${server.port}
    lease-expiration-duration-in-seconds: 9 #如果9秒之内没有收到心跳,服务器就把我剔除
    lease-renewal-interval-in-seconds: 3 #间隔多长时间给eureka服务端发送一次心跳证明自己还活着
  

2.1.5 eureka-server 配置

eureka:
    server: #这边主要的功能是注册的服务如果没有收到心跳不会立马给你剔除,会保留一段时间
        enable-self-preservation: false  #这个生产环境一般是开启的,测试环境不开启
        eviction-interval-timer-in-ms: 3000 #清理没有用的服务间隔

2.1.6 eureka集群

主要是看他们相互调用的关系,我就理解为启动多个eurekaServer。然后把服务注册到这些Server上

server:
  port: 8763
eureka:
  instance:
    hostname: zxEureka1 #主机名字

  client:
    service-url:
      defaultZone: http://zxEureka2:8762/eureka #这边指向的是集群的服务器
      #注册地址
    register-with-eureka: false #注册到eureka上,但是我现在这个是server不需要注册
    fetch-registry: false #是否需要从eureka上拿路径
spring:
  application:
    name: eurekaTeam

#上面是第一台eurekaserver 的配置
#下面是第二台eurekaserver 的配置
server:
  port: 8762
eureka:
  instance:
    hostname: zxEureka2 #主机名字

  client:
    service-url:
      defaultZone: http://zxEureka1:8763/eureka #这边指向的是集群的服务器
      #注册地址
    register-with-eureka: false #注册到eureka上,但是我现在这个是server不需要注册
    fetch-registry: false #是否需要从eureka上拿路径
spring:
  application:
    name: eurekaTeam  #集群的server应用名称要一样
#注册方和调用方
server:
  port: 8889
eureka:
  instance:
    hostname: localhost #主机名字
  client:
    service-url:
      defaultZone: http://zxEureka2:8762/eureka,http://zxEureka1:8763/eureka
      #注册地址 注册到eureka
    register-with-eureka: true #注册到eureka上,但是我现在这个是server不需要注册
    fetch-registry: true #是否需要从eureka上拿路径
spring:
  application:
    name: eureka-consumer

2.2 Consul 的安装

如果有同学安装出现问题可以看这个帖子,一般用云服务器才会出现这样的问题

consul启动报错listen tcp 39.108.107.163:8600: bind: cannot assign requested address_Qfoom的博客-CSDN博客

2.2.1 consul 配置

这边注意的是消费方去拿注册到consul服务地址还是那个方法

只是取的名字不太对 

import org.springframework.cloud.client.discovery.DiscoveryClient;
@Autowired
DiscoveryClient discoveryClient;
List<ServiceInstance> instances = discoveryClient.getInstances("EUREKA-CLIENT");
server:
  port: 8000
spring:
  cloud:
    consul:
      host: localhost #你自己的consul服务器的地址
      port: 8500
      discovery:
        service-name: ${spring.application.name}
        prefer-ip-address: true #是不是用ip
  application:
    name: Consul

2.2.2 consul pom配置

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

2.3 Nacos 

国产之光,阿里系,注册中心和配置中心,开源!

pom文件

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.2.2.RELEASE</version>
 </dependency>

配置文件

server:
  port: 8888

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos 地址
  application:
    name: Nacos-consumer

获取方式还是统一的,没什么变化。

3.Ribbon 负载均衡

ribbon是客户端的负载均衡,首先讲一下有7种负载均衡的策略。

ribbon有两个功能第一就是简化获取服务的作用,之前我们是获取ip 获取端口然后拼接url实现,

用ribbon 就会简便很多,虽然这么配置只是简化了调用,但是也给消费端配置了一个轮询的策略。

//配置类
@Configuration
public class RestTemplateConfig {
    //定义bean
    @Bean
    //使用ribbon
    // 加了这个注解之后通过ip和端口访问的方式就会失效
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

@GetMapping("/find2/{id}")
private CompanyInfo find2(@PathVariable int id){
        String url = "http://EUREKA-CLIENT/company/findCompany/1";
        CompanyInfo ci = restTemplate.getForObject(url,
                CompanyInfo.class);
        return ci;
}

如果我们要换轮询策略的话有两种方式可以换

第一种配置文件的方式

#这个是服务端的服务名称
EUREKA-CLIENT:
  ribbon:
    NFloadBalancerRulerClassName: com.netflix.loadbalancer.RandomRule
#这边是具体的策略,一共有7种。

第二种是代码方式

首先需要一个配置类

@Configuration
public class MyRule {
    @Bean
    public IRule rule(){
        return new RandomRule();
    }
}


#上面下面是两个类,注意区分
//允许去eureka上去获取地址
@EnableDiscoveryClient
//注册到eureka的服务
@EnableEurekaClient
@SpringBootApplication
//name 设置服务提供方服务名称
@RibbonClient(name = "EUREKA-CLIENT",configuration = MyRule.class)
public class ConsumerApp {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApp.class,args);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值