Java高级教程之SpringCloud-4:Eureka发现服务和使用服务

除了ZooKeeper,也可以使用Eureka来注册服务。ZooKeeper在节点较少的情况下能保证数据一致性,节点多的情况下可能不保证可用性。Eureka多个节点之间可以互相复制,可用性较高,数据一致性由于复制延迟会有所降低。

 

Eureka已非开源,且不能与ZooKeeper兼容。所以要注释掉ZooKeeper,才能使用Eureka。Eureka为netflix组件,相关文档可参考spring-cloud-netflix。

https://spring.io/projects/spring-cloud-netflix

 

Spring Cloud Netflix provides Netflix OSS integrations for Spring Boot apps through autoconfiguration and binding to the Spring Environment and other Spring programming model idioms. With a few simple annotations you can quickly enable and configure the common patterns inside your application and build large distributed systems with battle-tested Netflix components. The patterns provided include Service Discovery (Eureka), Circuit Breaker (Hystrix), Intelligent Routing (Zuul) and Client Side Load Balancing (Ribbon)..

 

Java高级教程之SpringCloud-4:Eureka发现服务和使用服务

 

在ApplicationMain也把注解改为@EnableEurekaClient

 

 

package com.lpplpp.product.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
//@EnableDiscoveryClient
@EnableEurekaClient
public class ApplicationMain {

    public static void main(String[] args) {
        SpringApplication.run(ApplicationMain.class, args);
        System.out.println("product microservice is running");
    }
}

 

 

 

因为产品服务product-service和order-service都是客户端,要注册到Eureka才能使用,所以这两个应用的pom.xml和ApplicationMain都要做这个变动。

 

客户端有了,还要有服务端,Eureka不需要下载启动,只需再创建一个Maven项目,用SpringBoot加载Eureka就可以了。

 

 

Java高级教程之SpringCloud-4:Eureka发现服务和使用服务

 

还需要在这个工程里pom.xml中加入依赖SpringBoot和SpringCloud,以及生成ApplicationMain入口类。

 

Java高级教程之SpringCloud-4:Eureka发现服务和使用服务

Java高级教程之SpringCloud-4:Eureka发现服务和使用服务

 

在ApplicationMain类中新增注解@EnableEurekaServer,打印信息为 

"Eureka microservice is running"

 

 

package com.lpplpp.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class ApplicationMain {

    public static void main(String[] args) {
        SpringApplication.run(ApplicationMain.class, args);
        System.out.println("Eureka microservice is running");
    }
}

另外要加上application.yml的配置。如果出现“Cannot execute request on any known server”错误,说明registerWithEureka和fetchRegistry没有设置false,因为服务端会尝试注册自己,

 

 

Java高级教程之SpringCloud-4:Eureka发现服务和使用服务

 

启动这个服务,就可以看到已经有Eureka服务了。

Started Eureka Server

 

这样再启动两个客户端product-service和order-service,这两个服务的application.yml文件配置都要新增Eureka的客户端配置。

 

Java高级教程之SpringCloud-4:Eureka发现服务和使用服务

 

访问下浏览器地址http://localhost:8180/order/1

结果:

 

{"id":1,"name":"mobile order","product":{"id":1,"name":"mobile"}}