Spring Cloud(三):服务提供与调用
上一篇文章我们介绍了eureka服务注册中心的搭建,这篇文章介绍一下如何使用eureka服务注册中心,搭建一个简单的服务端注册服务,客户端去调用服务使用的案例。
案例中有三个角色:服务注册中心、服务提供者、服务消费者,其中服务注册中心就是我们上一篇的eureka单机版启动既可,流程是首先启动注册中心,服务提供者生产服务并注册到服务中心中,消费者从服务中心中获取服务并执行。
服务提供
我们假设服务提供者有一个hello方法,可以根据传入的参数,提供输出“hello xxx,this is first messge”的服务
1、pom包配置
创建一个springboot项目,pom.xml中添加如下配置:
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-eureka</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
2、配置文件
application.properties配置如下:
- spring.application.name=spring-cloud-producer
- server.port=9000
- eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
参数在上一篇都已经解释过,这里不多说。
3、启动类
启动类中添加@EnableDiscoveryClient
注解
- @SpringBootApplication
- @EnableDiscoveryClient
- public class ProducerApplication {
- public static void main(String[] args) {
- SpringApplication.run(ProducerApplication.class, args);
- }
- }
4、controller
提供hello服务
- @RestController
- public class HelloController {
- @RequestMapping("/hello")
- public String index(@RequestParam String name) {
- return "hello "+name+",this is first messge";
- }
- }
添加@EnableDiscoveryClient
注解后,项目就具有了服务注册的功能。启动工程后,就可以在注册中心的页面看到SPRING-CLOUD-PRODUCER服务。
到此服务提供者配置就完成了。
服务调用
1、pom包配置
和服务提供者一致
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-eureka</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
2、配置文件
application.properties配置如下:
- spring.application.name=spring-cloud-consumer
- server.port=9001
- eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
3、启动类
启动类添加@EnableDiscoveryClient
和@EnableFeignClients
注解。
- @SpringBootApplication
- @EnableDiscoveryClient
- @EnableFeignClients
- public class ConsumerApplication {
- public static void main(String[] args) {
- SpringApplication.run(ConsumerApplication.class, args);
- }
- }
@EnableDiscoveryClient
:启用服务注册与发现@EnableFeignClients
:启用feign进行远程调用
Feign是一个声明式Web Service客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。
4、feign调用实现
- @FeignClient(name= "spring-cloud-producer")
- public interface HelloRemote {
- @RequestMapping(value = "/hello")
- public String hello(@RequestParam(value = "name") String name);
- }
- name:远程服务名,及spring.application.name配置的名称
此类中的方法和远程服务中contoller中的方法名和参数需保持一致。
5、web层调用远程服务
将HelloRemote注入到controller层,像普通方法一样去调用即可。
- @RestController
- public class ConsumerController {
- @Autowired
- HelloRemote HelloRemote;
- @RequestMapping("/hello/{name}")
- public String index(@PathVariable("name") String name) {
- return HelloRemote.hello(name);
- }
- }
到此,最简单的一个服务注册与调用的例子就完成了。
测试
简单调用
依次启动spring-cloud-eureka、spring-cloud-producer、spring-cloud-consumer三个项目
先输入:http://localhost:9000/hello?name=neo
检查spring-cloud-producer服务是否正常
返回:hello neo,this is first messge
说明spring-cloud-producer正常启动,提供的服务也正常。
浏览器中输入:http://localhost:9001/hello/neo
返回:hello neo,this is first messge
说明客户端已经成功的通过feign调用了远程服务hello,并且将结果返回到了浏览器。
负载均衡
以上面spring-cloud-producer为例子修改,将其中的controller改动如下:
- @RestController
- public class HelloController {
- @RequestMapping("/hello")
- public String index(@RequestParam String name) {
- return "hello "+name+",this is producer 2 send first messge";
- }
- }
在配置文件中改动端口:
- spring.application.name=spring-cloud-producer
- server.port=9003
- eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
打包启动后,在eureka就会发现两个服务提供者,如下图:
然后在浏览器再次输入:http://localhost:9001/hello/neo
进行测试:
第一次返回结果:hello neo,this is first messge
第二次返回结果:hello neo,this is producer 2 send first messge
不断的进行测试下去会发现两种结果交替出现,说明两个服务中心自动提供了服务均衡负载的功能。如果我们将服务提供者的数量在提高为N个,测试结果一样,请求会自动轮询到每个服务端来处理。
Spring Cloud(三):服务提供与调用的更多相关文章
- spring cloud(三)服务提供与调用
服务提供 我们假设服务提供者有一个hello方法,可以根据传入的参数,提供输出“hello xxx,this is first messge”的服务 1.pom包配置 创建一个springboot项目 ...
- Spring Cloud 微服务六:调用链跟踪Spring cloud sleuth +zipkin
前言:随着微服务系统的增加,服务之间的调用关系变得会非常复杂,这给运维以及排查问题带来了很大的麻烦,这时服务调用监控就显得非常重要了.spring cloud sleuth实现了对分布式服务的监控解决 ...
- Spring Cloud(三):声明式调用
声明式服务调用 前面在使用spring cloud时,通常都会利用它对RestTemplate的请求拦截来实现对依赖服务的接口调用,RestTemplate实现了对http的请求封装处理,形成了一套模 ...
- Spring Cloud(三):服务提供与调用 Eureka【Finchley 版】
Spring Cloud(三):服务提供与调用 Eureka[Finchley 版] 发表于 2018-04-15 | 更新于 2018-05-07 | 上一篇文章我们介绍了 Eureka 服务 ...
- Spring Cloud微服务系列文,服务调用框架Feign
之前博文的案例中,我们是通过RestTemplate来调用服务,而Feign框架则在此基础上做了一层封装,比如,可以通过注解等方式来绑定参数,或者以声明的方式来指定请求返回类型是JSON. 这种 ...
- Spring Cloud 微服务三: API网关Spring cloud gateway
前言:前面介绍了一款API网关组件zuul,不过发现spring cloud自己开发了一个新网关gateway,貌似要取代zuul,spring官网上也已经没有zuul的组件了(虽然在仓库中可以更新到 ...
- Spring Cloud 网关服务 zuul 三 动态路由
zuul动态路由 网关服务是流量的唯一入口.不能随便停服务.所以动态路由就显得尤为必要. 数据库动态路由基于事件刷新机制热修改zuul的路由属性. DiscoveryClientRouteLocato ...
- 【多线程】java多线程Completablefuture 详解【在spring cloud微服务之间调用,防止接口超时的应用】【未完成】
参考地址:https://www.jianshu.com/p/6f3ee90ab7d3 示例: public static void main(String[] args) throws Interr ...
- Dubbo和Spring Cloud微服务架构'
微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...
- Spring Cloud 微服务
https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247486301&idx=2&sn=f6d45860269b61 ...
随机推荐
- 【资料】wod属性
各个属性的影响力量 st 影响近战远程伤害和体力体质 co 影响体力(比力量的影响大)智力 in 影响法力和魔法防御灵巧 dx 影响近战远程命中和近战躲闪魅力 ch 影响诅咒和治愈能力,诅咒攻击命中和 ...
- [Lua]mac 上安装lua
mac 安装lua google了好个看起来都不怎么好操作.这个是在命令行下操作的非常easy. curl -R -O http://www.lua.org/ftp/lua-5.2.3.tar.gz ...
- 神经网络可以拟合任意函数的视觉证明A visual proof that neural nets can compute any function
One of the most striking facts about neural networks is that they can compute any function at all. T ...
- Django文档学习
文档位置:https://docs.djangoproject.com/zh-hans/2.1/
- Flume目录
1. Flume的安装配置 2. flume和kafka整合(转) 3. Flume NG 配置详解(转) 4. Flume-NG一些注意事项(转) 5. FLume监控文件夹,将数据发送给Kafka ...
- onehot的好处,还是可以看看的
https://www.jqr.com/article/000243 一句话概括:one hot编码是将类别变量转换为机器学习算法易于利用的一种形式的过程. 类别值是分配给数据集中条目的数值编号. s ...
- CC+语言 struct 深层探索——CC + language struct deep exploration
1 struct 的巨大作用 面对一个人的大型C/C++程序时,只看其对struct 的使用情况我们就可以对其编写者的编程经验进行评估.因为一个大型的C/C++程序,势必要涉及一些(甚至 ...
- 移植tslib和Qt5.6到三星s5pv210开发板
tslib1.4移植 下载tslib1.4后 1.cp tslib-1.4.tar.bz2 /home/gec 2.tar jxvf tslib-1.4.tar.bz2 3.sudo -s 4.cd ...
- dynamic bone unity github
https://github.com/unity3d-jp/unitychan-crs 我发现我总找不到以前的东西.. https://www.cnblogs.com/alps/p/8284577.h ...
- mac远程桌面Microsoft Remote Desktop for Mac的安装与使用
mac远程桌面Microsoft Remote Desktop for Mac的安装与使用 学习了:https://blog.csdn.net/ytangdigl/article/details/78 ...