SpringCloud Eureka

本文介绍如何使用 SpringCloud Eureka 进行服务注册与发现,并通过实例演示了服务提供者和服务消费者的配置过程。

什么是SpringCloud,官网解释:Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems.

SpringCloud提供工具给开发者,使其可以很快的创建通用式的分布式系统,目前使用比较广的是SpringCloud Eureka(服务治理框架),下面主要通过简单的demo对Eureka的使用做演示

1)首先创建SpringBoot项目(SpringCloud框架基于SpringBoot)增加pom依赖

<dependencies>
   <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-eureka-server</artifactId>
   </dependency>
</dependencies>
 
<dependencyManagement>
   <dependencies>
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-dependencies</artifactId>
         <version>Dalston.SR4</version>
         <type>pom</type>
         <scope>import</scope>
      </dependency>
   </dependencies>
</dependencyManagement>

由于是要创建Eureka Server,所以在SpringBoot启动类上增加注解@EnableEurekaServer

@EnableEurekaServer
@SpringBootApplication
public class SpringCloudServerApplication {

   public static void main(String[] args) {
      SpringApplication.run(SpringCloudServerApplication.class, args);
   }
}

这样启动时,应用将完全只用默认配置,如果想给服务命名,或者是修改监听端口,可以在 resource/application.properties 中进行如下配置。由于此工程就是唯一的一个 EurekaServer ,这里就不向自己注册自己了,将 register-with-eureka 设置成 false。

spring.application.name=eureka-server
server.port=8083
eureka.client.register-with-eureka=false 

启动服务,查看8083

可以看到没有服务注册在Eureka上

2)创建一个服务端,增加pom依赖

<dependencies>
   <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-eureka</artifactId>
   </dependency>
</dependencies>
<dependencyManagement>
   <dependencies>
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-dependencies</artifactId>
         <version>Dalston.SR4</version>
         <type>pom</type>
         <scope>import</scope>
      </dependency>
   </dependencies>
</dependencyManagement>

这是一个服务提供者,需要在启动类增加client注解,代码如下

@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloudProviderApplication {

   public static void main(String[] args) {
      SpringApplication.run(SpringCloudProviderApplication.class, args);
   }
}

创建Controller类

@RestController
public class Controller {

    @RequestMapping(value = "/test/{string}", method = RequestMethod.GET)
    public String echo(@PathVariable String string) {
        return string;
    }
}

最后同样是配置,除去配置应用名与监听端口外,还需要配置一下 Eureka Server 的地址。

spring.application.name=service-provider
server.port=8084
eureka.client.serviceUrl.defaultZone=http://localhost:8083/eureka/

启动项目,刷新server服务,可以看到已经有一个client注册

调用localhost:8084/test/abcd,可以正常返回,至此服务端完成

3)编写调用方,增加pom依赖

	<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>
    </dependencies>
	<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

客户端使用的是Spring Cloud Feign,Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端,所以pom引入了spring-cloud-starter-feign,配置好依赖,在启动类中增加注解

使用 @EnableDiscoveryClient 注解启用服务注册与发现,使用 @EnableFeignClients 注解激活 FeignClients,添加 @LoadBalanced 注解将 RestTemplate 与 AsyncRestTemplate 与服务发现结合。

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class SpringCloudConsumerApplication {

   @LoadBalanced
   @Bean
   public RestTemplate restTemplate() {
      return new RestTemplate();
   }

   @LoadBalanced
   @Bean
   public AsyncRestTemplate asyncRestTemplate(){
      return new AsyncRestTemplate();
   }

   public static void main(String[] args) {
      SpringApplication.run(SpringCloudConsumerApplication.class, args);
   }
}

在使用 FeignClient 之前,我们还需要完善它的配置,配置服务名以及方法对应的HTTP请求,其中代码如下:

@FeignClient(name = "service-provider")
public interface TestService {
    @RequestMapping(value = "/test/{str}", method = RequestMethod.GET)
    String echo(@PathVariable("str") String str);
}

最后增加配置

spring.application.name=service-consumer
server.port=8085
eureka.client.serviceUrl.defaultZone=http://localhost:8083/eureka/


现在就可以在controller中使用

@RestController
public class Controller {
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private AsyncRestTemplate asyncRestTemplate;
    @Autowired
    private  TestService testService;

    @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET)
    public String rest(@PathVariable String str) {
        return restTemplate.getForObject("http://service-provider/test/" + str, String.class);
    }
    @RequestMapping(value = "/echo-async-rest/{str}", method = RequestMethod.GET)
    public String asyncRest(@PathVariable String str) throws Exception{
        ListenableFuture<ResponseEntity<String>> future = asyncRestTemplate.
                getForEntity("http://service-provider/test/"+str, String.class);
        return future.get().getBody();
    }
    @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET)
    public String feign(@PathVariable String str) {
        return testService.echo(str);
    }
}

启动项目可以正常访问所有方法,这是一个简单的demo实际应用中会更为复杂



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值