springcloud eureka注册与消费快速上手

2018-08-03 07:30:03来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

springcloud eureka注册与消费快速上手

1、eureka 简介

  Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。Eureka包含两个组件:Eureka Server和Eureka Client。Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就别一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。(来自百度百科:https://baike.baidu.com/item/Eureka/22402835?fr=aladdin)

2、springboot引入依赖

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

3、注册服务

@SpringBootApplication
@EnableEurekaServer
public class EurekaserverApplication {

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

4、配置文件

server.port=8000

spring.application.name=eureka-server

eureka.instance.hostname=localhost
eureka.client.fetch-registry=false #检索服务
eureka.client.register-with-eureka=false #注册服务
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

5、注册客户端

@SpringBootApplication
@EnableDiscoveryClient
public class EurekaclientApplication {

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

6、配置文件

server.port=6001

spring.application.name=eureka-client

eureka.client.service-url.defaultZone=http://localhost:8000/eureka/

 7、提供服务和消费服务

  提供服务本身并没有什么特殊的地方,使用springMVC写的restController下的各个requestmapping就是提供的服务。

  消费服务则比较重要:

    1、ribbon

    引入依赖

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

    restTemplate的注册

@SpringBootApplication
@EnableDiscoveryClient
public class EurekaclientApplication {

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

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

    restTemplate的使用

@Slf4j
@Service
public class UserRibbonService {

    public UserRibbonService() {
    }

    @Autowired
    private RestTemplate restTemplate;

    public String addUser(){

        ResponseEntity<String> forEntity = restTemplate.getForEntity("http://user-service/user", String.class);

        String body = forEntity.getBody().toString();

        return body;
    }

}

   使用restTemplate方式比较繁琐,需要写大量的代码去访问服务,解析响应。ribbon其实是作为一个负载均衡的中间件,有大量配置去更改负载均衡的各种参数,这里不细说了。

2、Feign

  Feign是通过编写了一个服务提供者的接口,自动实现了消费服务的一种方式,比restTemplate更方便一些。

  引入依赖

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

  注册feign

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class EurekaclientApplication {

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

  使用feignclient编写接口

@FeignClient("user-service") // user-service 是所指定的服务提供者serviceID
@Component
public interface UserFeign {

  // 根据服务提供者的接口编写,保证一样。 @RequestMapping(value
= "/user", method = RequestMethod.GET) String addUser(); }

  自动注入接口,调用服务

@Slf4j
@Service
public class UserService {

    public UserService() {
    }

    @Autowired
    private UserFeign userFeign;

    public String addUser() {

        log.info("addUser");

        return userFeign.addUser();
    }

}

  Feign 可以设置ribbon的属性,这里不演示了。

  

还有其他诸如:Hystrix(熔断)、zuul(网关)、config(远程配置)......等,我以后再写。

这篇文写的这么简陋应该没什么人转载吧

不过转载的话,请注明来源。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Kafka集群搭建

下一篇:[转载] Spring框架——AOP前置、后置、环绕、异常通知