本文主要是介绍SpringCloud系列(14)--Eureka服务发现(Discovery),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言:在上一章节中我们说明了一些关于服务信息的配置,在本章节则介绍一些关于Discovery的知识点及其使用
1、Discovery是什么,有什么用
Discovery(服务发现)是eureka的功能和特性,有时候微服务可能需要对外提供一种功能,这个功能可以对外提供服务IP、服务名称、端口号等服务信息,而这时候Discovery就能实现这个功能,Discovery能对外暴露注册进Eureka里的服务信息
2、启用服务发现
在provider-payment8001模块的启动类里加上@EnableDiscoveryClinet这一注解来启用服务发现
package com.ken.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication
//标注为Eureka Client(服务注册中心)
@EnableEurekaClient
@EnableDiscoveryClient
public class PaymentMain {public static void main(String[] args) {SpringApplication.run(PaymentMain.class, args);}
}
效果图:
3、实现服务发现接口
在provider-payment8001模块的PaymentController类里注入DiscoveryClient接口,然后利用DiscoveryClient接口的方法在PaymentController类里实现服务发现接口
package com.ken.springcloud.controller;import com.ken.springcloud.entities.CommonResult;
import com.ken.springcloud.entities.Payment;
import com.ken.springcloud.service.PaymentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
import java.util.List;@RestController
@Slf4j
public class PaymentController {@Resourceprivate PaymentService paymentService;@Value("${server.port}")private String serverPort;@Resourceprivate DiscoveryClient discoveryClient;@PostMapping("/payment/insert")public CommonResult insert(@RequestBody Payment payment) {int result = paymentService.insert(payment);log.info("插入结果{}",result);if(result > 0) {return new CommonResult(200,"插入数据库成功,提供服务的端口号为" + serverPort,result);}else {return new CommonResult(500,"插入数据库失败",result);}}@GetMapping("/payment/get/{id}")public CommonResult insert(@PathVariable("id") Long id) {Payment payment = paymentService.getPaymentById(id);log.info("查询结果{}",payment);if(payment != null) {return new CommonResult(200,"查询成功,提供服务的端口号为" + serverPort,payment);}else {return new CommonResult(500,"没有对应的数据,查询失败,查询id" + id,payment);}}@GetMapping("/payment/discovery")public Object discovery() {//获取eureka内的服务List<String> services = discoveryClient.getServices();for (String service : services) {log.info("***service:" + service);}//获取服务名为CLOUD-PAYMENT-SERVICE下的实例List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");for (ServiceInstance instance : instances) {log.info(instance.getServiceId()+"\t"+instance.getHost()+"\t"+instance.getPort()+"\t"+instance.getUri());}return this.discoveryClient;}}
效果图:
4、调用服务发现接口,查看接口效果
在浏览器地址栏输入http://localhost:8001/payment/discovery然后按回车调用服务发现接口,查看接口返回的信息以及控制台里打印的日志信息,如果接口能成功拿到eureka里的服务信息,则证明服务发现接口实现成功
效果图:
这篇关于SpringCloud系列(14)--Eureka服务发现(Discovery)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!