当前位置: 首页 > news >正文

SpringCloud |第三篇: 服务消费者(Feign+REST)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、Feign简介

    Feign是Netflix开发的声明式、模版化的HTTP伪客户端。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。

二、准备工作

    继续用上一节的工程, 启动eureka-server,端口为1001; 启动user-service及user-service1服务,端口分别为8084、8085.

三、创建Feign服务器

    新建一个feign-server服务器

    

    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.example</groupId>
	<artifactId>da-feign-server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>da-feign-server</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.0.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>Finchley.M8</spring-cloud.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</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>

	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>


</project>

    在工程的配置文件application.yml文件,指定程序名为feign-service,端口号为3001,服务注册地址为http://localhost:8761/eureka/ ,代码如下:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:1001/eureka/
  instance:
    lease-renewal-interval-in-seconds: 30
server:
  port: 3001
spring:
  application:
    name: feign-service

    在程序的启动类DaFeignServerApplication,加上@EnableFeignClients注解开启Feign的功能:

@EnableFeignClients
@EnableEurekaClient
@SpringBootApplication
public class DaFeignServerApplication {
	public static void main(String[] args) {
		SpringApplication.run(DaFeignServerApplication.class, args);
	}
}

    定义一个feign接口,通过@FeignClient(“服务名”),来指定调用哪个服务。比如在代码中调用了service-hi服务的“/hi”接口,代码如下:

@FeignClient(value = "user-service")
public interface HiService {
    @RequestMapping(value = "/hi",method = RequestMethod.GET)
    String getHi(@RequestParam(value = "name") String name);
}

    controller层,对外暴露一个”/getHi”的API接口,通过上面定义的Feign客户端HiService来消费服务。代码如下:

@RestController
public class HiController {
    @Autowired
    HiService hiService;

    @RequestMapping(value = "/getHi",method = RequestMethod.GET)
    public String getHi(@RequestParam String name){
        return hiService.getHi(name);
    }
}

    启动程序,多次访问http://localhost:3001/getHi?name=zhangsan,浏览器交替显示:

121325_JOqT_2940767.png

121335_PmBi_2940767.png

四、源码下载

    FeignServer源码下载:https://gitee.com/Clarences/Feign-Service

转载于:https://my.oschina.net/Clarences/blog/1647110

相关文章:

  • Android请求网络数据下载APK安装包
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 技术相对论之软件架构
  • Fragment 生命周期怎么来的?
  • Redis和Memcache和MongoDB简介及区别分析(整理)
  • ubuntu16.4安装最新版wine3.0
  • c++中局部变量初始化的问题
  • WordCount
  • 外卖也智能!美团骑手智能助手的技术与实践
  • 【协议转换和消息路由】camel-spring-boot-starter 实践
  • 坑货!阿里奇门中心
  • [ssh]如何设计ARM板上多用户key登录系统
  • 71. Simplify Path
  • numpy 数组运算
  • Java 选择排序selection sort
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 2019.2.20 c++ 知识梳理
  • css布局,左右固定中间自适应实现
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • extjs4学习之配置
  • Gradle 5.0 正式版发布
  • input的行数自动增减
  • JAVA并发编程--1.基础概念
  • nginx 负载服务器优化
  • SQLServer插入数据
  • v-if和v-for连用出现的问题
  • Vim Clutch | 面向脚踏板编程……
  • XForms - 更强大的Form
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 复习Javascript专题(四):js中的深浅拷贝
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 基于游标的分页接口实现
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 一、python与pycharm的安装
  • 优化 Vue 项目编译文件大小
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 《码出高效》学习笔记与书中错误记录
  • Java性能优化之JVM GC(垃圾回收机制)
  • linux 淘宝开源监控工具tsar
  • 阿里云服务器如何修改远程端口?
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #预处理和函数的对比以及条件编译
  • $(selector).each()和$.each()的区别
  • (1)SpringCloud 整合Python
  • (2)MFC+openGL单文档框架glFrame
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (二)springcloud实战之config配置中心
  • (分享)自己整理的一些简单awk实用语句
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (强烈推荐)移动端音视频从零到上手(下)
  • (生成器)yield与(迭代器)generator
  • (四)Linux Shell编程——输入输出重定向
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题