日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/9/30 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nacos作注册中心+feign接口调用进行服务提供和服务消费代码示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 依賴
  • 服務提供者
  • 服務消費者
  • 驗證

依賴

<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接口调用进行服务提供和服务消费代码示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。