文档章节

【图文经典版】声明式调用服务SpringCloud之Feign实例讲解

pocher
 pocher
发布于 2017/12/27 11:13
字数 727
阅读 1434
收藏 1

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

注意:在上两篇 创建SpringCloud服务,并向注册中心注册自己  、SpringCloud创建Eureka注册中心

的基础上,我们建立hello-consumer服务

第一部分:创建SpringBoot工程

1、新建项目

2、选择创模板

然后,在弹出框中选择Spring Initializr,并使用默认的模板‘http://start.spring.io’。点击下一步(Next)

3、填写公司信息

4、勾选依赖

5、选择项目储存路径

6、Pom文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.learning.pocher</groupId>
	<artifactId>hello-consumer</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>hello-consumer</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<spring-cloud.version>Edgware.RELEASE</spring-cloud.version>
	</properties>

	<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>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

第二部分:修改和添加文件

1、修改application.properties文件

spring.application.name=hello-consumer
spring.port=2221
eureka.client.service-url.defaultZone=http://localhost:1110/eureka/


2、修改启动类,添加注解

添加注解@EnableDiscoveryClient和@EnableFeignClients

3、添加service层

package com.learning.pocher.helloconsumer.feignservice;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

@FeignClient("hello-service1")
public interface ServiceClient {
    @RequestMapping("/callToXiaoAI")
    String getHelloService1();
}

4、添加Controller层

package com.learning.pocher.helloconsumer.controller;

import com.learning.pocher.helloconsumer.feignservice.ServiceClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloConsumer {
    @Autowired
    ServiceClient serviceClient;

    @RequestMapping("/feign-consumer")
    public String helloConsumer(){
        String returnMessage = serviceClient.getHelloService1();
        System.out.println(returnMessage);
        return "returnMessage";
    }
}

5、目录结构

第二部分:依次启动各个服务

注意:启动顺序不要错了哦,先启动注册中心eureka-center,然后启动服务提供者hello-service1,最后启动服务消费者hello-consumer

1、启动注册中eureka-center服务

没有此工程的参考 SpringCloud创建Eureka注册中心 这篇文章,或者直接下载此eureka-center工程

github仓库地址:https://github.com/pocher/SpringCloudEurkaDemo

访问:localhost:1110,这时是没有服务可用的。

2、启动hello-service1服务

没有此工程的参考 创建SpringCloud服务,并向注册中心注册自己 这篇文章,或者直接下载此hello-service1工程

github仓库地址:https://github.com/pocher/SpringCloudEurka-helloservice1

刷新:localhost:1110,这时发现有一个hello-service1服务,就是我们启动的hello-service1服务。

3、启动hello-consumer工程

刷新:localhost:1110,这时发现hello-consumer服务也在服务列表里。

有红色英文字体提示

没有红色粗体英文提示

 

第三部分:Feign服务的调用

1、访问hello-consumer工程

访问地址:http://localhost:2221/feign-consumer

看到返回的数据

2、请求流程分析:

A.浏览器发送请求,通过指定域名和端口(http://localhost:2221)匹配服务,

B.然后通过@RequestMapping匹配路径(/feign-consumer)到指定Controller中的

方法helloConsumer()

第四部分:项目下载

github仓库地址:https://github.com/pocher/SpringCloudEurka-helloconsumer

 

 

 

 

© 著作权归作者所有

pocher
粉丝 6
博文 36
码字总数 24616
作品 0
昌平
程序员
私信 提问
SpringCloud学习系列之二 ----- 服务消费者(Feign)和负载均衡(Ribbon)

前言 本篇主要介绍的是SpringCloud中的服务消费者(Feign)和负载均衡(Ribbon)功能的实现以及使用Feign结合Ribbon实现负载均衡。 SpringCloud Feign Feign 介绍 Feign是一个声明式的Web Servi...

虚无境
01/15
512
0
SpringCloud之声明式服务调用 Feign(三)

一 Feign简介 Feign是一种声明式、模板化的HTTP客户端,也是netflix公司组件。使用feign可以在远程调用另外服务的API,如果调用本地API一样。 我们知道,阿里巴巴的doubbo采用二进制的RPC协议...

2018/07/13
0
0
史上最简单的 SpringCloud 教程 | 终章

版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 ,博主地址:http://blog.csdn.net/forezp。 https://blog.csdn.net/forezp/article/details/70148833 转载请标明出处...

方志朋
2017/04/12
0
0
【Spring Cloud】分布式必学springcloud(七)——声明式服务调用Feign

一、前言 在上篇博客中,小编带大家接触了断路器Hystrix,是不是很好玩。分布式服务之间有了Hystrix,可以很好的提高容错性能。 但是在实际开发中,项目中会有很多的服务间的调用,对于服务的...

kisscatforever
2018/04/23
0
0
Spring MVC项目使用Feign声明式服务调用

Spring MVC项目使用Feign声明式服务调用 什么是声明式服务调用? 拆分成 什么声明式? 可以从编程范式入手了解: 编程范式: 命令式编程(Imperative Programming) 声明式编程(Declarative Pro...

suveng
07/15
79
0

没有更多内容

加载失败,请刷新页面

加载更多

JVM性能调优的6大步骤,及关键调优参数详解

JVM内存调优 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。 1.Full GC 会对整个堆进行整理,包括Young、Tenured和Perm。Full GC因为需要对整个堆进行回收,所以比较慢,...

一只会编程的狼
25分钟前
6
0
并发和并行性有什么区别?

并发和并行性有什么区别? 示例被赞赏。 #1楼 并发性:具有共享资源潜力的多个执行流 例如:两个线程争用一个I / O端口。 平行主义:将问题分成多个相似的块。 例如:通过在文件的每半部分上...

javail
27分钟前
4
0
(推荐使用)提高开发效率工具集合

提高开发效率工具集合(推荐使用) 一、Hutool工具类 官网地址:https://www.hutool.cn/ Github地址:https://github.com/looly/hutool/ Gitee 地址:https://gitee.com/loolly/hutool/ 文档参...

明德先生
31分钟前
5
0
java并发-缓存一致性协议和内存屏障的思考和理解

################这是之前的思考 内存屏障只是保证清空流水线,如何保证高速缓存的内容更新到最新或刷新到主存呢?这个问题突然想到了,不知道这个需要怎回答。 内存屏障保证的CPU执行执行序...

萧默
35分钟前
5
0
类型名称后面的括号是否与new有所不同?

如果“测试”是普通类,则之间是否有任何区别: Test* test = new Test; 和 Test* test = new Test(); #1楼 new Thing(); 很明显,您想要一个构造函数,而new Thing; 表示您不介意是否未调...

技术盛宴
58分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部