nacos作注册中心+feign接口调用进行服务提供和服务消费代码示例
生活随笔
收集整理的這篇文章主要介紹了
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=degradedegraderule.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接口调用进行服务提供和服务消费代码示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【多线程编程学习】java多线程基于数据
- 下一篇: 使用拦截器和redis+token实现防