spring cloud服务调用者

编写服务调用者

服务被注册、发布到 Eureka 服务器后,就需要有程序去发现它,并且进行调用。此处
所说的调用者,是指同样注册到 Eureka 的客户端,来调用其他客户端发布的服务,简单的
说,就是 Eureak 内部调用。由于同一个服务,可能会部署多个实例,调用过程可能涉及负
载均衡、服务器查找等问题,Netflix 的项目已经帮我们解决,并且 Spring Cloud 已经封装
了一次,我们仅需编写少量代码,就可以实现服务调用。
新建名称为“first-ek-service-invoker”的项目,在 pom.xml 文件中加入依赖,如代码
清单 3-6 所示。
代码清单 3-6:codes\03\3.2\first-ek-service-invoker\pom.xml

org.springframework.cloud
spring-cloud-starter-config


org.springframework.cloud
spring-cloud-starter-eureka


org.springframework.cloud
spring-cloud-starter-ribbon

建立配置文件 application.yml,内容如代码清单 3-7。
代 码 清 单 3-7 :
codes\03\3.2\first-ek-service-invoker\src\main\resources\application.yml
server:
port: 9000
spring:
application:
name: first-service-invoker
eureka:
instance:
hostname: localhost
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
在配置文件中,配置了应用名称为“first-service-invoker”,这个调用者的访问端口为
9000,需要注意的,这个调用本身也可以对外提供服务。与提供者一样,使用 eureka 的配
置,将调用者注册到“first-ek-server”上面。下面编写一个控制器,让调用者对外提供一
个测试的服务,代码清单 3-8 为控制器的代码实现。
代码清单 3-8:
codes\03\3.2\first-ek-service-invoker\src\main\java\org\crazyit\cloud\InvokerControlle
r.java
@RestController
@Configuration
public class InvokerController {
@Bean

《疯狂 Spring Cloud 微服务架构实战》作者:杨恩雄

本电子书全部文章,均节选自《疯狂 Spring Cloud 微服务架构实战》一书,作者杨恩雄。
作者博客:https://my.oschina.net/JavaLaw/blog

@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();

}

@RequestMapping(value = “/router”, method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public String router() {
RestTemplate restTpl = getRestTemplate();
// 根据应用名称调用服务
String json = restTpl.getForObject(
http://first-service-provider/person/1”, String.class);
return json;

}

}

在控制器中,配置了 RestTemplate 的 bean,RestTemplate 本来是 spring-web 模块下
面 的类 ,主 要用 来调 用 REST 服 务, 本身 并不 具备 调用 分布 式服 务的 能力 ,但 是
RestTemplate 的 bean 被@LoadBalanced 注解修饰后,这个 RestTemplate 实例就具有访
问分布式服务的能力,关于该类的一些机制,我们将放到负载均衡一章中讲解。
在控制器中,新建了一个 router 的测试方法,用来对外发布 REST 服务,该方法只是
一个路由作用,实际上使用 RestTemplate 来调用“first-ek-service-provider”(服务提供者)
的服务。需要注意的是,调用服务时,仅仅是通过服务名称来进行调用。接下来编写启动类,
如代码清单 3-9 所示。
代码清单 3-9:
codes\03\3.2\first-ek-service-invoker\src\main\java\org\crazyit\cloud\FirstInvoker.java
@SpringBootApplication
@EnableDiscoveryClient
public class FirstInvoker {
public static void main(String[] args) {
SpringApplication.run(FirstInvoker.class, args);

}

}

在启动类中,使用了@EnableDiscoveryClient 注解来修改启动类,该注解使得服务调
用者,有能力去 Eureka 中发现服务,需要注意的是@EnableEurekaClient 注解已经包含了
@EnableDiscoveryClient 的功能,也就是说,一个 Eureka 客户端,本身就具有发现服务的
能力。配置完成后,依次执行以下操作:
 启动服务器(first-ek-server)
 启动服务提供者(first-ek-service-provider)
 启动服务调用者(first-ek-service-invoker)
使用浏览器访问 Eureka,可看到注册的客户信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值