Spring Cloud Eureka 服务注册与发现。
在Spring Cloud体系中,Eureka角色是服务的注册与发现。在里面涉及到三个关键的角色:服务注册中心,服务调用者,服务提供者。
Eureka Server
eureka server 是服务注册中心,所有的服务都应该注册到这里来
我们还是在之前的项目基础上,新建一个module,pom文件中引入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
这样声明出这个项目是一个eureka server
在启动类上增加@EnableEurekaServer注解。
配置文件application.yml:
server:
port: 8761
spring:
application:
name: acs-eureka-server
eureka:
instance:
lease-expiration-duration-in-seconds: 6
lease-renewal-interval-in-seconds: 2
client:
service-url:
defaultZone: http://localhost:8761/eureka/
register-with-eureka: false
fetch-registry: false
其中 eureka.client.register-with-eureka=false表明自己不需要向自己注册,否则eureka会将自己当做一个微服务向自己进行注册。
启动后访问:http://localhost:8761/
服务调用者需要访问服务提供者的资源,我们这里用到Feign
同样的,新建一个nodule项目,pom文件修改为:
<!--远程调用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
配置文件application.yml中指定要注册到那个server
port: 8086
spring:
application:
name: acs-eureka-invoker
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
在启动类上添加@EnableEurekaClient和@EnableFeignClients注解
这个时候,启动就能成功了,但我们这里用到了Feign,远程调用服务提供者的接口,所以我们需要写一个接口
@FeignClient(name = "acs-eureka-provider")
public interface RemoteInterface {
@PostMapping("/hello")
String hello();
}
这个接口中有一个/hello方法对应着服务提供者的/hello方法。
我们再新建一个Controller类
@RestController
public class HelloController {
@Autowired
private RemoteInterface remoteInterface;
@RequestMapping("/acs/hello")
public String hello(){
return remoteInterface.hello();
}
}
这样我们的调用者就启动完毕了。启动后我们访问上一步建立的eureka server,发现注册的实例多了一个acs-eureka-invoker,而这个名称就是我们指定的应用名称。
Eureka Provider
服务提供者提供具体的业务或数据库的操作等,这里我们也是新建一个子module,
配置文件applicaiton.xml中配置服务端口,名称,向哪个服务进行注册
server:
port: 8083
spring:
application:
name: acs-eureka-provider
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
启动类上添加springboot启动的注释就可以
添加一个controller类。供服务调用者调用
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello";
}
}
启动后访问eureka server,可以看到实例处又多了一个acs-eureka-provider
访问:http://localhost:8086/acs/hello
说明acs-eureka-invoker中已经调用到了acs-eureka-provider中的方法