Spring Cloud Eureka(1)快速应用
服务注册中心以及服务发现管理,本文旨在快速搭建一个Spring Cloud Eureka的应用demo;将在后续文章更深入的分析。
本文所用的基本版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>15</java.version>
<spring-cloud.version>2020.0.1</spring-cloud.version>
</properties>
1、eureka服务
1.1、依赖包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
1.2、配置文件 application.yml
#端口号
server:
port: 8700
#服务地址
eureka:
instance:
hostname: localhost
#由于我们目前创建的应用是一个服务注册中心,而不是一个普通的应用,默认情况下,这个应用会向注册中心(也是它自己)注册它自己,设置为false表示禁止这种自己向自己注册的默认行为
client:
register-with-eureka: false
#表示不会去检索其他服务,因为服务注册中心本身的职责就是维护服务实例,他不需要去检索其他服务
fetch-registry: false
#指定服务注册中心的位置
#搭建Eureka集群相互指向注册中心
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#自我保护模式默认是自动开启的,可以选择关闭,禁用自我保护模式,保证不可用的服务及时剔除
server:
enable-self-preservation: false
#留存的服务示例低于多少比例进入保护模式
renewal-percent-threshold: 0.5
1.3、应用入口
@SpringBootApplication
@EnableEurekaServer //eureka服务
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
2、服务提供者producer
2.1、依赖包 pom.xml
<!--注意区分spring-cloud-starter-netflix-eureka-client和spring-cloud-netflix-eureka-client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.2、配置文件 application.yml
#端口号
server:
port: 8701
eureka:
client:
serviceUrl:
#eureka-server的地址 如果集群,使用逗号分开
defaultZone: http://localhost:8700/eureka/
#服务名
spring:
application:
name: eureka-producer
2.3、应用入口
@SpringBootApplication
@EnableEurekaClient #无论是服务提供者还是服务消费者都是eureka-server的客户端
public class EurekaProducerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaProducerApplication.class, args);
}
}
2.4、提供的服务
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(@RequestParam String name){
return "hello "+name +" , producer is ready";
}
@RequestMapping("/index")
public String index(){
return "hello , producer is ready";
}
}
3、服务消费者consumer
3.1、依赖包 pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3.2、配置文件 application.yml
#端口号
erver:
port: 8702
#eureka-server地址,集群用逗号隔开
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8700/eureka/
#应用名
spring:
application:
name: eureka-consumer
3.3、应用入口
@SpringBootApplication
@EnableEurekaClient
public class EurekaConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaConsumerApplication.class, args);
}
}
3.4、服务消费
这里可以用到http客户端进行访问服务提供者,提供两种方式
- openfeign
- RestTemplate
3.4.1、openfeign
3.4.1.1、pom.xml引入依赖
<!--对于Feign的封装,Feign是一个声明式的Web服务客户端。它支持Feign本身的注解、JAX-RS注解以及SpringMVC的注解。Spring Cloud集成Ribbon和Eureka以在使用Feign时提供负载均衡的http客户端。-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
3.4.1.2、应用入口添加开启openfeign扫描
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients //开启openfeign扫描
public class EurekaConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaConsumerApplication.class, args);
}
}
3.4.1.3、中间访问类 HelloRemote.java
/**
* 远程服务名
*/
@FeignClient(name = "eureka-producer")
public interface HelloRemote {
@RequestMapping(value = "/hello")
String hello(@RequestParam(value = "name") String name);
}
3.4.1.4、消费
@RestController
public class HelloController {
@Autowired
private HelloRemote helloRemote;
@RequestMapping("/hello/{name}")
public String hello(@PathVariable("name") String name){
return helloRemote.hello(name);
}
}
依次启动eureka service 、producer、consumer;访问消费测试类。
3.4.2、使用RestTemplate
3.4.2.1、注册restTemplate
@Configuration
public class BeanConfig {
@Bean
@LoadBalanced //加入ribbon的支持,那么在调用时,即可改为使用服务名称来访问
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
3.4.2.2、消费
@RestController
public class HelloController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/index/{name}")
public String index(@PathVariable("name") String name){
return restTemplate.getForEntity("http://EUREKA-PRODUCER/index",String.class).getBody();
}
}
依次启动eureka service 、producer、consumer;访问消费测试类。
使用ribbon时需要关注依赖包的版本问题,如新版的openfeign不再依赖ribbon,而需要单独引入LoadBalanced,如若你参考本文章时因使用了迭代的版本时请留意。