专栏首页JAVA同学会Spring Cloud 服务端注册与客户端调用

Spring Cloud 服务端注册与客户端调用

Spring Cloud 服务端注册与客户端调用

  上一篇中,我们已经把Spring Cloud的服务注册中心Eureka搭建起来了,这一章,我们讲解如何将服务注册到Eureka,以及客户端如何调用服务。

一、注册服务

  首先要再项目中引入Eureka Client,在pom.xml中加入如下配置:

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>Edgware.SR3</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>
<dependencies>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
	</dependency>
</dependencies>

  然后再我们的application.properties中配置好Eureka注册中心的地址,如下:

eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

  http://localhost:8761/eureka/是默认地址,你可以进行修改。程序上我们正常开发即可,使用Spring MVC。如下:

@SpringBootApplication
@RestController
@RequestMapping("demo")
public class Application {

    @RequestMapping("home")
    public String home() {
        return "Hello world";
    }

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }

}

  这样/demo/home就会注册到Eureka注册中心。接下来我们要说一说如何调用。

二、使用Feign进行调用,Hystrix熔断

  首先我们将Feign引入到项目中,并将Hystrix一并引入,这样可以在服务不可用时进行熔断。在pom.xml中加入如下配置:

<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>

  然后在application.properties中加入

feign.hystrix.enabled=true

  将feign的熔断开启了。然后在main class中加上注解

@SpringBootApplication
@EnableCircuitBreaker
@EnableFeignClients
public class SpringCloudClientApplication {

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

  接下来我们编写Feign的调用接口,ITempService,如下:

@FeignClient(name = "EUREKA-SERVER",fallback = TempService.class)
public interface ITempService {
    @RequestMapping(method = RequestMethod.GET, value = "/demo/home")
    public String index();
}

  @FeignClient说明这个接口是一个FeignClient,其中name指向的是服务的名字,在前面的服务中,我们应用的名字叫EUREKA-SERVER,我们这里将name指向这个服务,fallback是熔断后执行的类,我们的熔断执行类为TempService。

  @RequestMapping指向EUREKA-SERVER服务中的具体接口,这里我们指向/demo/home,这样我们在调用index方法时,就会调用远程服务的/demo/home。但是如果远程服务不可用,我们该如何处理呢?这样就要用到Hystrix熔断。

  我们编写ITempService接口的实现类TempService,如下:

@Component
public class TempService implements ITempService {

    @Override
    public String index() {
        return "index error";
    }
}

  这样,当远程服务/demo/home不可用时,就会执行index方法,返回“index error”。

  最后,我们编写Controller,完成调用,如下:

@RestController
@RequestMapping("feign")
public class TempController {
    @Autowired
    private ITempService tempService;
    @RequestMapping("call")
    public String call(){
        return tempService.index();
    }
}

  这样我们的服务调用与服务注册的例子就讲解完了,是不是很简单,有问题,欢迎在评论区沟通。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Future

      通常情况下,我们在写多线程任务时,都是实现run方法,大家注意到run方法是没有返回值的。如果我们要用到其他线程的返回值该怎么办呢?

    小忽悠
  • SpringBoot整合Redis、ApacheSolr和SpringSession

    SpringBoot整合Redis、ApacheSolr和SpringSession

    小忽悠
  • ES7学习笔记(十三)GEO位置搜索

    ES的基本内容介绍的已经差不多了,最后我们再来看看GEO位置搜索,现在大部分APP都有基于位置搜索的功能,比如:我们点外卖,可以按照离我们的距离进行排序,这样可...

    小忽悠
  • spring cloud config配置记录

    老梁
  • 设计模式(-)-工厂模式介绍

    >今天介绍的几个设计模式是前一段时间看《大话设计模式》这本书中介绍的,做个笔记记录下看完的前几章节的内容。不足之处欢迎指正。

    用户2288853
  • Java三目运算

    版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/47...

    Hankkin
  • 快速学习-SpringBoot实践

    接下来,我们来看看如何用SpringBoot来玩转以前的SSM,我们沿用之前讲解SSM用到的数据库tb_user和实体类User

    cwl_java
  • 【设计模式-门面模式】

    学校的学生信息相关系统大家都用过,比如门户网、教务系统、图书管理系统等,一般需要用到某个系统,需要单独去登录,比如同时想去门户网和教务系统查询信息,需要在两个网...

    Liusy
  • 聊聊springcloud的featuresEndpoint

    spring-cloud-commons-2.0.0.RC1-sources.jar!/org/springframework/cloud/client/Com...

    codecraft
  • 匿名内部类何为匿名?

    比如为什么称之为匿名? 为什么也算是一个类,而且是内部类? 它和内部类有什么区别?

    PhoenixZheng

扫码关注云+社区

领取腾讯云代金券