spring cloud-eureka

来源:互联网 发布:js判断是否离开页面 编辑:程序博客网 时间:2024/06/05 03:44

在spring cloud简介中,我们了解到netflix eureka负责云端负载均衡,用于服务注册与发现。
eureka服务注册与发现调用流程如下:
eureka
eureka与zookpeeper都是服务注册与发现组件,因为eureka与spring cloud集成更高,所以我们用eureka举例讲解。
首先我们创建一个eureka server项目microservice-discovery-eureka,然后创建一个服务提供项目microservice-provider-user和一个服务消费项目microservice-consumer-movie。
microservice-provider-user和microservice-consumer-movie都为eureka client,需要先将服务注册到eureka server才可以完成服务调用。
创建eureka server项目非常的方便,我们在application.yml声明相关配置信息:

security:  basic:    enabled: true  user:    name: user    password: password123server:  port: 8761eureka:  client:    register-with-eureka: false    fetch-registry: false    service-url:      defaultZone: http://user:password123@localhost:8761/eureka

其次在main启动程序加上@EnableEurekaServer注解,这样eureka server项目便创建好了。

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication@EnableEurekaServerpublic class EurekaApplication {  public static void main(String[] args) {    SpringApplication.run(EurekaApplication.class, args);  }}

对于服务提供方microservice-provider-user,我们也需要在application.yml声明服务相关的配置:

server:  port: 7900spring:  jpa:    generate-ddl: false    show-sql: true    hibernate:      ddl-auto: none  datasource:    platform: h2    schema: classpath:schema.sql    data: classpath:data.sql  application:    name: microservice-provider-userlogging:  level:    root: INFO    org.hibernate: INFO    org.hibernate.type.descriptor.sql.BasicBinder: TRACE    org.hibernate.type.descriptor.sql.BasicExtractor: TRACE    com.itmuch: DEBUGeureka:  client:    healthcheck:      enabled: true    serviceUrl:      defaultZone: http://user:password123@localhost:8761/eureka  instance:    prefer-ip-address: true    instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}    metadata-map:      zone: ABC      # eureka可以理解的元数据      lilizhou: BBC  # 不会影响客户端行为    lease-renewal-interval-in-seconds: 5

其次在main启动程序加上@EnableEurekaClient注解,声明为eureka client项目:

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication@EnableEurekaClientpublic class MicroserviceSimpleProviderUserApplication {  public static void main(String[] args) {    SpringApplication.run(MicroserviceSimpleProviderUserApplication.class, args);  }}

最后我们在Controller加上接口调用注解,启动main函数,服务提供方项目便可以提供接口服务。

@RestControllerpublic class UserController {  @Autowired  private UserRepository userRepository;  @GetMapping("/simple/{id}")  public User findById(@PathVariable Long id) {    return this.userRepository.findOne(id);  }}

对于服务消费方microservice-consumer-movie,我们也需要在application.yml声明服务相关的配置:

spring:  application:    name: microservice-consumer-movieserver:  port: 7901user:   userServicePath: http://localhost:7900/simple/eureka:  client:    healthcheck:      enabled: true    serviceUrl:      defaultZone: http://user:password123@localhost:8761/eureka  instance:    prefer-ip-address: true

其次在main启动程序加上@EnableEurekaClient注解,声明为eureka client项目:

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;import org.springframework.context.annotation.Bean;import org.springframework.web.client.RestTemplate;@SpringBootApplication@EnableEurekaClientpublic class MicroserviceSimpleConsumerMovieApplication {  @Bean  public RestTemplate restTemplate() {    return new RestTemplate();  }  public static void main(String[] args) {    SpringApplication.run(MicroserviceSimpleConsumerMovieApplication.class, args);  }}

最后演示如何在服务消费方调用服务提供方的服务:

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;import com.itmuch.cloud.entity.User;@RestControllerpublic class MovieController {  @Autowired  private RestTemplate restTemplate;  @Value("${user.userServicePath}")  private String userServicePath;  @GetMapping("/movie/{id}")  public User findById(@PathVariable Long id) {    return this.restTemplate.getForObject(this.userServicePath + id, User.class);  }}

http接口的开发与调用案例可以参考:http接口开发与调用案例。
到此,我们使用eureka完成了服务的注册、发现与调用。
下篇文章我们讲解如何使用spring cloud的ribbon组件提供服务高可用功能,敬请关注。

0 0
原创粉丝点击