文章目录

  • 依赖
  • 服务提供者
  • 服务消费者
  • 验证

依赖

    <parent><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-build</artifactId><version>2.1.6.RELEASE</version><relativePath/></parent><properties><!-- Dependency Versions --><spring-cloud-commons.version>2.1.2.RELEASE</spring-cloud-commons.version><spring-cloud-netflix.version>2.1.2.RELEASE</spring-cloud-netflix.version><spring-cloud-openfeign.version>2.1.2.RELEASE</spring-cloud-openfeign.version><spring-cloud-bus.version>2.1.2.RELEASE</spring-cloud-bus.version><spring-cloud-gateway.version>2.1.2.RELEASE</spring-cloud-gateway.version>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-commons</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-context</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-client</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId><optional>true</optional></dependency>

在nacos命令行输入:startup.cmd -m standalone
启动nacos

服务提供者

配置:

server.port=18082
spring.application.name=service-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=*

代码:

@EnableDiscoveryClient
@SpringBootApplication
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}
 @RestControllerclass EchoController {@RequestMapping(value = "/", method = RequestMethod.GET)public ResponseEntity index() {return new ResponseEntity("index error", HttpStatus.INTERNAL_SERVER_ERROR);}@RequestMapping(value = "/test", method = RequestMethod.GET)public ResponseEntity test() {return new ResponseEntity("error", HttpStatus.INTERNAL_SERVER_ERROR);}@RequestMapping(value = "/sleep", method = RequestMethod.GET)public String sleep() {try {Thread.sleep(1000L);}catch (InterruptedException e) {e.printStackTrace();}return "ok";}@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)public String echo(@PathVariable String string) {return "hello Nacos Discovery " + string;}@RequestMapping(value = "/divide", method = RequestMethod.GET)public String divide(@RequestParam Integer a, @RequestParam Integer b) {return String.valueOf(a / b);}}
}

服务消费者

spring.application.name=service-consumer
server.port=18083
management.endpoints.web.exposure.include=*
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848feign.sentinel.enabled=truespring.cloud.sentinel.transport.dashboard=localhost:8080
spring.cloud.sentinel.eager=truespring.cloud.sentinel.datasource.ds1.file.file=classpath: flowrule.json
spring.cloud.sentinel.datasource.ds1.file.data-type=json
spring.cloud.sentinel.datasource.ds1.file.rule-type=flowspring.cloud.sentinel.datasource.ds2.file.file=classpath: degraderule.json
spring.cloud.sentinel.datasource.ds2.file.data-type=json
spring.cloud.sentinel.datasource.ds2.file.rule-type=degrade

degraderule.json

[{"resource": "GET:http://service-provider/test","count": 0.5,"grade": 1,"timeWindow": 30},{"resource": "GET:http://service-provider","count": 0.5,"grade": 1,"timeWindow": 10},{"resource": "GET:http://service-provider/sleep","count": 20.0,"grade": 0,"timeWindow": 30},{"resource": "GET:http://service-provider/divide","count": 0.5,"grade": 1,"timeWindow": 30}
]

flowrule.json:

[{"resource": "GET:http://service-provider/echo/{str}","controlBehavior": 0,"count": 1,"grade": 1,"limitApp": "default","strategy": 0}
]

启动类:

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {@LoadBalanced@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}@LoadBalanced@Bean@SentinelRestTemplatepublic RestTemplate restTemplate1() {return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}@FeignClient(name = "service-provider", fallback = EchoServiceFallback.class, configuration = FeignConfiguration.class)//对应服务提供者spring.application.name=service-providerpublic interface EchoService {@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)String echo(@PathVariable("str") String str);@RequestMapping(value = "/divide", method = RequestMethod.GET)String divide(@RequestParam("a") Integer a, @RequestParam("b") Integer b);default String divide(Integer a) {return divide(a, 0);}@RequestMapping(value = "/notFound", method = RequestMethod.GET)String notFound();}}class FeignConfiguration {@Beanpublic EchoServiceFallback echoServiceFallback() {return new EchoServiceFallback();}
}class EchoServiceFallback implements EchoService {@Overridepublic String echo(@PathVariable("str") String str) {return "echo fallback";}@Overridepublic String divide(@RequestParam Integer a, @RequestParam Integer b) {return "divide fallback";}@Overridepublic String notFound() {return "notFound fallback";}
}

controller:

@RestController
public class TestController {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate RestTemplate restTemplate1;@Autowiredprivate EchoService echoService;@Autowiredprivate DiscoveryClient discoveryClient;// @PostConstruct// public void init() {// restTemplate1.setErrorHandler(new ResponseErrorHandler() {// @Override// public boolean hasError(ClientHttpResponse response) throws IOException {// return false;// }//// @Override// public void handleError(ClientHttpResponse response) throws IOException {// System.err.println("handle error");// }// });// }@RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET)public String rest(@PathVariable String str) {return restTemplate.getForObject("http://service-provider/echo/" + str,String.class);}@RequestMapping(value = "/index", method = RequestMethod.GET)public String index() {return restTemplate1.getForObject("http://service-provider", String.class);}@RequestMapping(value = "/test", method = RequestMethod.GET)public String test() {return restTemplate1.getForObject("http://service-provider/test", String.class);}@RequestMapping(value = "/sleep", method = RequestMethod.GET)public String sleep() {return restTemplate1.getForObject("http://service-provider/sleep", String.class);}@RequestMapping(value = "/notFound-feign", method = RequestMethod.GET)public String notFound() {return echoService.notFound();}@RequestMapping(value = "/divide-feign", method = RequestMethod.GET)public String divide(@RequestParam Integer a, @RequestParam Integer b) {return echoService.divide(a, b);}@RequestMapping(value = "/divide-feign2", method = RequestMethod.GET)public String divide(@RequestParam Integer a) {return echoService.divide(a);}@RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET)public String feign(@PathVariable String str) {return echoService.echo(str);}@RequestMapping(value = "/services/{service}", method = RequestMethod.GET)public Object client(@PathVariable String service) {return discoveryClient.getInstances(service);}@RequestMapping(value = "/services", method = RequestMethod.GET)public Object services() {return discoveryClient.getServices();}
}

验证



nacos控制台查看:

调用服务消费者接口执行服务提供者中的方法:

nacos作注册中心+feign接口调用进行服务提供和服务消费代码示例相关推荐

  1. nacos 公共_技术分享——使用nacos作注册中心和配置中心

    什么是nacos? 首先看下官方的简介: Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. Naco ...

  2. SpringCloud第三话 -- 基于Nacos实现注册中心以及远程服务调用

    本文主要记录基于Nacos实现服务注册中心和远程服务调用 1. 基于Nacos实现服务注册与发现 基于pring-boot-starter-parent 2.6.8,pring-cloud-depen ...

  3. 3.spring cloud + zookeeper注册中心 + Feign调用案例

    3.spring cloud + zookeeper注册中心 + Feign调用案例 3.1.pom.xml定义 <?xml version="1.0" encoding=& ...

  4. SpringCloud 2020版本教程1:使用nacos作为注册中心和配置中心

    点击关注公众号,Java干货及时送达 本次教程旨在为读者提供2020版本的最佳实践方案,使用我认为最容易学习的组件,可能很多组件有很多替代方案,在这里不依依讲述.本次教程使用的组件如下: 注册中心:n ...

  5. nacos 负载策略_Spring Cloud Alibaba:Nacos 作为注册中心和配置中心使用

    Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案,Nacos 作为其核心组件之一,可以作为注册中心和配置中心使用,本文将对其用法进行详细介绍. SpringCloud实战 ...

  6. Dubbo 融合 Nacos 成为注册中心

    Nacos 作为 Dubbo 生态系统中重要的注册中心实现,其中 dubbo-registry-nacos 则是 Dubbo 融合 Nacos 注册中心的实现. 预备工作 当您将 dubbo-regi ...

  7. Nacos(九)之Dubbo 融合 Nacos 成为注册中心

    转载自  Dubbo 融合 Nacos 成为注册中心 Nacos 作为 Dubbo 生态系统中重要的注册中心实现,本文将会介绍如何进行 Dubbo 对接 Nacos 注册中心的工作. 预备工作 请确保 ...

  8. 唠唠Nacos的注册中心

    目录 Nacos是什么 为什么需要注册中心 Nacos注册中心架构 核心功能#重要 服务注册表结构 #重要 灵魂一问:你觉得注册中心应该是CP还是AP? 参考nacos官网资料和自己学习过程中整理的资 ...

  9. 基于Nacos的注册中心与配置中心

    基于Nacos的注册中心与配置中心 Nacos简介 概述 Nacos全称是动态命名和配置服务,Nacos是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.Nacos主要用于发现.配置和 ...

最新文章

  1. linux之文件基本操作学习笔记
  2. 【Linux 线程】常用线程函数复习《一》
  3. 一比特控制所有:通过一比特绕过Windows 10保护
  4. 5 款可替代 du 命令的工具!
  5. 如何快速实现Mathematica和Mathtype之间的切换
  6. CF819E:Mister B and Flight to the Moon(构造、归纳法)
  7. 2021年最新springcloud配置中心不生效的版本原因
  8. Java新手造假_老板居然让我在Java项目中“造假”
  9. h5 server send event(sse)
  10. python数字位数重排_Python面试题:给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数...
  11. jq追加html属性,jQuery 操作 HTML 元素和属性的方法
  12. webpack常用知识点
  13. Qt 学习之路 :信号槽
  14. raw,qcow2虚拟磁盘挂载
  15. 三菱q系列c语言模块,【重磅干货】三菱Q系列串口模块QJ71C24的Modbus通信
  16. 像素深度、分辨率与图片大小的关系?图片大小怎么计算?
  17. linux查看硬盘vid,在linux获取并打印usb移动硬盘vid和pid
  18. Soul源码分析 ——值得借鉴的代码技巧
  19. Python爬虫 requests使用post请求发送文件
  20. Digital Signal Processing 数字信号处理

热门文章

  1. 怎么设置qq信息同步服务器,QQ输入法如何设置网络同步
  2. 英特尔核显自定义分辨率_核显性能大提升 11代酷睿核显畅玩《战地5》
  3. catia的vh轴怎么显示_Origin入门教程(三):Origin中曲线怎么平移?
  4. mysql异地备份_MySQL数据库异地备份与还原方法
  5. 弹出确定_Redmi K30 Pro再剧透:弹出式全面屏,没有高刷
  6. 七、SpringBoot整合elasticsearch集群
  7. 五十二、微信小程序云开发中的云存储
  8. 6.29 Vue 第二天 学习笔记
  9. 做时间序列预测有必要用深度学习吗?梯度提升回归树媲美甚至超越多个DNN模型...
  10. 近期有哪些值得读的推荐系统论文?来看看这份私人阅读清单