Spring Cloud Eureka(1)快速应用

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,如若你参考本文章时因使用了迭代的版本时请留意。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值