服务调用——OpenFeign

Spring Cloud OpenFeign:声明式服务调用 OpenFeign是声明式的服务调用工具,我们只需创建一个接口并用注解的方式来配置它,就可以实现对某个服务接口的调用,简化了直接使用RestTemplate来调用服务接口的开发量。OpenFeign具备可插拔的注解支持,同时支持OpenFeign注解、JAX-RS注解及SpringMvc注解。 阅读详情

1、概述

1. OpenFeign是什么?

Feign是一个声明式的WebService客户端,使用Feign能让编写WebService客户端更加简单。

它的使用方法是在客户端定义一个服务接口然后在上面添加注解。Feign也支持可拔插式的编码器和解码器。

SpringCloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。

Feign也是运行在消费者端的,使用 Ribbon 进行负载均衡,所以 OpenFeign 直接集成了 Ribbon。

2. Feign能做什么?

Feign旨在使编写Java Http客户端变得更容易。之前我们使用Eureka + Ribbon + RestTemplate时,利用RestTemplate对Http请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由它来帮助定义和实现依赖服务接口的定义。在Feign的实现下,只需要创建一个接口并使用注解的方式来配置它,即可完成对服务提供方的接口绑定,简化了使用SpringCloud Ribbon时,自动封装服务调用客户端的开发量。

Feign集成了Ribbon:利用Ribbon维护服务提供方的服务列表信息,并且通过如轮询的算法实现了客户端的负载均衡。而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方式,优雅而简单的实现了服务调用。

3. Feign和OpenFeign的区别
FeignOpenFeign
特点Feign是SpringCloud组件中的一个轻量级RESTful的HTTP服务客户端,Feign内置了Ribbon,用来做客户端的负载均衡,去调用服务注册中心的服务。Feign的使用方式是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务。OpenFeign是SpringCloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping 等。OpenFeign的 @FeignClient 可以解析SpringMVC的 @RequestMapping 注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。
启动器spring-cloud-starter-feignspring-cloud-starter-openfeign

Feign已经停止维护,所以我们只需要关注OpenFeign的使用即可,我们现在学习的就是利用OpenFeign实现我们之前用的Ribbon+RestTemplate实现的功能。

2、 OpenFeign使用步骤

1. 服务消费者端的POM文件添加依赖
<!--openfeign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--eureka client-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

在POM中我们引入了OpenFeign的依赖以及Eureka客户端的依赖。

3. 写配置文件YAML
server:
  port: 80

eureka:
  client:
    register-with-eureka: false		# 客户端就不注册入服务注册中心了
    fetch-registry: true	#从EurekaServer中检索服务提供者
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka/

由于80为服务消费方,只是调用服务提供方的服务,所以可以不讲自己注册到服务注册中心。

4. 主启动类:
package org.jun;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * @author junfeng.lin
 * @date 2021/2/18 2:00
 */
@SpringBootApplication
@EnableFeignClients	//激活feign功能
public class OpenFeignClient {
    public static void main(String[] args) {
        SpringApplication.run(OpenFeignClient.class,args);
    }
}

注意主启动类上需要添加 @EnableFeignClients 注解,这个注解声明80服务可以使用Feign来实现服务接口的调用。

5. 服务消费端业务类:

在服务消费方中编写如下的接口即可对服务提供方的服务进行调用:

package org.jun.Feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * @author junfeng.lin
 * @date 2021/2/18 2:05
 */
@Component
@FeignClient("EUREKA-ORDER")
public interface MyFeign {
    @GetMapping("/getPort")
    public String getPort();
}

@FeignClient 注解中的value值为要调用的服务名称,也就是8001/8002服务提供方注册到Eureka注册中心的服务名,这个注解就是告诉该接口调用哪个服务,而OpenFeign默认会使用轮询的负载均衡算法来调用具体的服务实例,在这个接口中我们需要使用服务提供方服务的哪个具体方法,将该方法作为接口方法写入接口中即可。

然后编写80服务消费方的Controller:

package org.jun.Controller;

import org.jun.Feign.MyFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author junfeng.lin
 * @date 2021/2/18 2:01
 */
@RestController
public class MyController {
    @Autowired
    private MyFeign myFeign;
    /**
     * 服务提供方8001和8002中的服务
     * 根据id查询订单
     * @return
     */
    @GetMapping("/getPort")
    public String getPort() {
        String port = myFeign.getPort();
        return port;
    }

    @GetMapping("testTimeOut")
    public String testTimeOut() {
        return myFeign.testTimeOut();
    }
}
6.测试效果

我们先启动Eureka的集群注册中心7002,然后启动服务提供方8001/8002,再启动服务消费方80,访问http://localhost/getPort,我们可以发现OpenFeign使用轮训的负载均衡算法实现了服务提供方服务接口的调用:
在这里插入图片描述
在这里插入图片描述

7. 总结:

在这里插入图片描述

简言之就是,客户端的服务接口使用用 @FeignClient 注解根据服务名称去调用服务提供方的具体服务。

3、OpenFeign的超时控制

1、OpenFeign默认等待服务提供方1秒钟,超过则报错

在这里插入图片描述

2、修改yaml文件配置信息
server:
  port: 80

spring:
  application:
    name: openfeignConsume

# eureka客户端的实例名称(服务消费者)
eureka:
  instance:
    hostname: localhost
  client:
    # 客户端就不注册入服务注册中心了
    register-with-eureka: false
    # 从EurekaServer中检索服务提供者
    fetch-registry: true
    service-url:
      # 设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://eureka7002.com:7002/eureka
# 设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
  # 指的是建立连接所用的时间,适用于网络状态正常的情况下,两端连接所用的时间(单位为ms)
  ReadTimeout: 5000
  # 指的是建立连接后从服务器读取到可用资源所用的时间(单位为ms)
  ConnectTimeout: 5000
3、测试效果

在这里插入图片描述

4、openFeign的日志功能

1、编写配置类
package org.jun.Config;

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author junfeng.lin
 * @date 2021/2/18 15:28
 */
@Configuration
public class FeignConfig {
    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}
2、修改yaml文件配置信息
logging:
  level:
    # 以什么日志级别监控哪个接口
    org.jun.Feign.MyFeign: debug
3、测试效果

访问了http://localhost/testTimeOut后,在控制台中出现如下日志信息

在这里插入图片描述

5、Openfeign中传输文件

1、使用Post请求

2、在feign中设置参数

@RequestMapping(value = "/db/importUserGroup",produces = MediaType.APPLICATION_JSON_VALUE,
        consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<?> importUserGroup(@RequestPart("file") MultipartFile file);
【SpringCloud】12、Spring Cloud使用OpenFeign实现服务调用 OpenFeign目前是Spring Cloud的二级子项目。它是一个声明式、模板化的HTTP客户端,仅在Application Client中使用。声明式调用是指,就像调用本地方法一样调用远程方法,无需感知操作远程HTTP请求。学习完OpenFeign后可以不使用RestTemplate进行调用。Spring Cloud的声明式调用,可以做到使用HTTP请求远程服务时能就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。 阅读详情

相关推荐

STM32与HT7038的高精度电能计量系统设计与实现

本文详细介绍了基于STM32微控制器与HT7038三相电能计量芯片的高精度电能计量系统设计与实现。文章从项目选型出发,深入剖析了硬件电路设计、SPI驱动开发、芯片校准及系统集成等关键环节,为智能电表、能源监控等应用提供了高性价比且稳定的国产化解决方案。

pytorch8learner的博客 389

服务调用:OpenFeign详解

文章目录OpenFeign基本介绍概述为什么要使用FeignFeign vs OpenFeignFeign的实现流程OpenFeign使用步骤OpenFeign超时控制OpenFeign日志增强OpenFeign文件传输 OpenFeign基本介绍 概述 服务之间如果需要相互访问,可以使用RestTemplate, 也可以使用 Feign客户端访问。它默认会使用Ribbon来实现负载均衡。 可以理解为Feign是一个超级方便的调用Spring Cloud远程服务的框架/工具,帮助开发者以更少耦合,更少代码,

张大安的博客 5815

Allegro17.2 出gerber文件详细流程 - 干货

Allegro17.2 出gerber文件详细流程 - 干货

u010614434的博客 1万+

【Springcloud】OpenFeign服务调用

【Springcloud】(06)中级搭建-OpenFeign服务调用(1)OpenFeign是什么(1.1)基本介绍(1.2)Feign能干什么?(1.3)Feign集成了Ribbon(2)OpenFeign服务调用(2.1)第一步:创建新的模块,并修改pom(2.2)第二步:创建配置文件yml(2.3)第三步:创建启动类(2.4)第四步:创建service接口,用来连接8001服务的方法(2....

weixin_44823875的博客 1379

PID控制器(位置式和增量式)

PID控制算法

zhinian_hao的博客 4512

ANSYS WB 网格划分详解与技巧

本文详细介绍了网格操作中的关键设置与功能选项。主要内容包括:1)网格显示风格与物理偏好设置;2)单元阶次选择对精度的影响;3)单元尺寸控制方法;4)尺寸调整功能,重点讲解了自适应尺寸调整、增长率控制和捕获曲率等选项;5)网格质量评估标准;6)四种主要划分方法(四面体、六面体主导、扫掠、多区域)的特点与适用场景;7)三种尺寸调整方式(直接调整、边缘尺寸调整、影响范围调整)的具体应用。文章强调在实际建模中需要根据模型特点合理选择网格参数,平衡计算精度与效率。

2403_87939837的博客 1698

六、Spring Cloud OpenFeign

六、Spring CloudOpenFeign Feign在GitHub已停更,Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端。Spring Cloud对Feign进行封装,使Feign支持了Spring MVC注解,能够在类接口上添加注解,成为一个REST API客户端,也就是OpenFeign。是一种声明式、模板化的HTTP客户端,主要目标是将Java Http客户端变得简单。Fegin还整合了Ribbon、Eureka和Hystrix,从而让Fei...

L_D_Y_K的博客 505

【BlueZ】编译产物详解:可执行文件/库文件/工具的生成路径与用途

BlueZ二次开发编译产物机制解析 摘要:在BlueZ蓝牙协议栈二次开发中,90%的报错源于对编译产物类型和路径的混淆。本文系统剖析BlueZ的三阶段编译机制:1)配置阶段生成Makefile;2)编译阶段在.libs目录下产生临时库和可执行文件(不可直接运行);3)安装阶段将产物部署到系统标准路径。重点解析守护进程、命令行工具、动态库的核心路径差异,并针对五大高频问题(如临时库运行崩溃、动态库不匹配、系统覆盖等)给出解决方案。

byte轻骑兵的技术小窝 1万+

SpringCloud微服务(八)——OpenFeign服务调用

Feign是一个声明式的Web Service客户端。它的出现使开发Web Service客户端变得很简单。

qq_43409401的博客 3638

【图像拼接】论文精读:Content-Preserving Warps for 3D Video Stabilization(CPW)

论文题目:Content-Preserving Warps for 3D Video Stabilization——用于3D视频稳定的内容保持扭曲GSP、SPW、LPC等warp时多个项最小化问题的思想都是来自于这篇论文——CPW视频防抖。我们描述了一种从手持摄像机转换视频的技术,以便它看起来像是用定向相机运动拍摄的。我们的方法调整视频以出现,就好像它是从附近的视点拍摄的,允许模拟 3D 相机运动。通过仅针对感知合理性,而不是准确的重建,我们能够开发能够有效从单个源视频中重建动态场景的算法。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 2万+

基于ENVI完成影像的去云操作以及后续处理

利用ENVI完成重采样影像的去云操作 由于SNAP重采样之后的影像是分波段保存的,ENVI的波段运算工具一次也只能输出一个波段,所以去云的操作分波段进行,原理是掩膜法 下面是打开所有波段后的界面 去云的依据是以quality_scene_classification栅格文件为基础,该文件是哨兵2数据自带的场景质量分类图,包含12个级别,可以通过SNAP软件查看,如下图所示: 对于去云操作而言,我们只需要DARK_FEATURE_SHADOW(地形等),CLOUD_SHADOW(云阴影)、CL

lemon_tttea的博客 2万+

Spring Cloud Open Feign的使用

什么是OpenFeign? OpenFeign:OpenFeign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。他的使用方法是定义一个服务接口然后在接口上添加注解。SpringCloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eurka和Ribbon组合使用以支...

带文豪的零点时分 229

【无人机路径规划】基于强化学习实现多无人机路径规划

【无人机路径规划】基于强化学习实现多无人机路径规划

k8291121的博客 1656

openFeign服务调用

文章目录openFeign设计原理传统http请求流程openFeign流程实践 openFeign设计原理 openFeign是轻量级的Http请求框架,不再像restTemplate那样显式声明请求URL,参数,返回类型,直接通过模块化的思想,将服务调用层封装为一个模块,在controller层像调用普通service那样调用,相对更加直观。封装了Http调用流程,更适合面向接口化的变成习惯 传统http请求流程 类似httpclient,restTemplate,OkHttp都是如此 openFei

kevin的博客 1747

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

微服务(七)——OpenFeign服务调用

Feign能干什么Feign旨在服务调用时,使编写Java Http客户端变得更容易。前面在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口......

不愿意做鱼的小鲸鱼の博客 1392

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

OpenFeign服务调用

前言 Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。只需要创建一个接口并在接口上添加注解即可。 它的使用方法是定义一个服务接口然后在上面添加注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HTTPMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。 Feign 能干什么? Feign旨在使编写Java Htt

微笑的博客 422

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

OpenFeign实现服务调用

Feign是一个声明式WebService客户端。使用Feign能让编写WebService客户端更加简单。它的使用方法是定义一个服务接口然后在上面添加注解。Feign也支持可插拔式的编码和解码器。Spring Cloud对feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。

weixin_72525373的博客 826

6_OpenFeign实现服务调用

????写在前面:前面我们使用 Eureka 注册中心注册服务,在服务端使用 Ribbon + RestTemplate模板 进行服务调用,但是如果想要调取服务提供者提供的多个服务,一个一个进行方法调用岂不是比较麻烦 ?Feign 使用在客户端还是服务端 ?为什么说Feign只需要一个接口一个注解就可实现服务调用 ? Feign 和 OpenFeign 有什么不一样 ?使用了 OpenFeign 会不会出现调取不到服务的情况 ?如果想要查看 OpenFeign 的详细调用情况,该怎么办 ? 6_Ope

多回头看一看 395

SpringCloud OpenFeign声明式服务调用

SpringCloud OpenFeign声明式服务调用

12程序猿的博客 986

SpringCloud服务调用 OpenFeign

Feign是一个声明式的Web服务客户端,让编写Web服务客户端变得非常容易,只需 创建一个接口并在接口上添加注解即可。 OpenFeign 是Spring Cloud 在Feign 的基础上支持了SpringMVC 的注解,如@RequestMapping等。OpenFeign 的@FeignClient 可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。 Feign自带负载均衡配置项。 首先向注册中心注册微服务

zxg的博客 2128

SpringCloud-服务调用-OpenFeign

服务调用 openfeign rpc

心流时间的博客 1415

一文看懂Openfeign服务调用原理

OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等。 OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

叔牙的专栏 1713

OpenFeign:声明式服务调用

OpenFeign 声明式服务调用

woruosuifenglang的博客 572

基于OpenFeign的服务调用

一 OpenFeign是什么 OpenFeign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。 Nacos很好的兼容了OpenFeign, OpenFeign默认集成了 Ribbon, 所以在Nacos下使用OpenFeign默认就实现了负载均衡的效果。 二 OpenFeign的引入 1 引入依赖 service模块中配置OpenFeign的pom依赖(实际是在服务消费者端需要OpenFeign的

实践求真知 968
上一篇: 负载均衡调用——Ribbon
下一篇: 服务网关——Gateway
jf-lin
博客等级 码龄7年 37粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值