开发者学堂课程【微服务框架 Spring Cloud 快速入门:Eure 服务发现】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/614/detail/9350
Eure 服务发现
目录
一. 前言
二. microservicecloud-provider-dept-8001服务发现Discovery
一、前言
服务发现:
点击此处。Eureka 自我点击 (相当于自我信息的掌握),现在服务发现的意思是表明类似于本服务的说明对外暴露于微服务,并让消费者知晓。
二、microservicecloud-provider-dept-8001服务发现Discovery
1. 对于注册进 eureka 里面的微服务,可以通过服务发现来获得该服务的信息
登陆一个网站,查出当前进驻宏福科技园的企业有哪一些,需要对外暴露查询接口或者淘宝上下一个单,查询快递的路径以及快递员,有一种快递信息的发现的接口和信息查入。
2. 修改 microservicecloud-provider-dept-8001工程的 DeptController
添加新的接口:服务发现接口
接口: DiscoveryClient client;
接下来返回 depart 8001
此处名称为 client,言下之意此处做一个类似于 dept,Discovery,Requestbody 的服务或方法让大家知道展示的模样和所表达的信息。
@RequestMapping(value = "/dept/discovery" ,
method = RequestMethod.GET)
public Object discovery()
{
List list = client.getSenxices();
system.out.println("***
*
***
*
***”+ list);
List srvList = client.getInstances.("MICROSERVICECLOUD-DEPT"for (ServiceInstane element : srvList) {
System.out.println(element.getserviceId() + "\t"
+ element.getHost() + "
+ element.getUri());
}
return this.client;
}
根据要求:可能存在包导入出错,discovery 之后,直接进入如下lmport'DiscoveryClient'(org.springframeworkcloud.client.discovery)
得到最终结果白令全消除。
RequestMapping(value = "/dept/discovery" , method m RequestMethod.GET)
public object discovery()
}
List list = client.getServices();
System.out.print1n("
*
**********”+list);
List srvList = client.
getInstances("IcROSERVICECLOUD-DEPT");
for (ServiceInstance element : srvList)
{
system.out.println(element.getServiceId() + "\t”+ element.getHtost() + "\t"+ element.getPort() + "\t"
element-getUri());
}
return this.client;
要服务发现,让别人来进行解读服务自身对自我描述情况:
@Autowired
private DiscoveryClient client;
(定义的变量)
client.getServices
:
之前 Eureka 中有一个微服务,此处为盘点 Eureka 中拥有的微服务有多少个,有哪些。
假设有一个微服务叫做部门,后续工作中添加越来越多的部门,商品,交易,订单,则 list 有四个微服务。
在微服务列表清单中,将 list 打印出来。第52行这个list有很多,要将这个 collect 转到 list 里,然后找出一个部门的微服务并打出这个部门微服务它的id,主机名字,端口以及访问地址的相关信息。这种情况下,是对微服务信息的一种 infor 信息的描述和提供暴露出给大家调用。
3. DeptProvider8001_App 主启动类(EnableDiscoveryClient)
@SpringBootApplication
@EnableEurekaClient l
/本服务启动后会自动注册进eureka服务中EnableDiscoveryClient
//服务发现
public class Deptprovider8001_App
public static void main(String[] args)
{
SpringApplication.run(DeptProvider8001_App.class, args );
}
}
主启动类做服务发现
@EnableDiscoveryClient //服务发现
4. 自测
(1)先要启动 EurekaServer
(2)再启动 DeptProvider8001_App 主启动类,需要稍等一会儿
8001需要花时间进入对应的EurekaServer
启动7001.8001
主体动类带来注解提供了服务发现,对外可以暴露。现在 Rest 的访问风格带有 dpt/ discovery
@RequestMapping(value = "/dept/discovery" , method = RequestMethod.GET)
(3)http://localhost:8001/dept/discovery
相当于自测,8001为自己,查看微服务者查看自己的 discovery 接口是否能通?这样才能知道是否对外暴露。
结果:
{"services":[],"localServiceInstance": {"host":"192.168.11.1"," port":8001," secure":false,"metadata":
{}, "uri":"http://192.168.11.1:8001", " serviceld":"microservicecloud-dept"}}
此处只有一个微服务,结合代码
System.out-println("*
*
*********"+ list);
得到:
**********[microservicecloud-deptl]
MICROSERVICECLOUD-DEPT192.168.11.1 8001
http://192.168.11.1:8001
如果后续有部门商品交易,订单,库存,积分,那么在其中会越来越多。
在微服务清单中找出 MICROSERVICECLOUD-DEPT,查找ServiceId,主机,名字等。
每刷新一次,则出现
MICROSERVICECLOUD-DEPT
192.168.11.1
(IP)
8001(端口)
http://192.168.11.1:8001(地址)
5. 修改 microservicecloud-consumer-dept-80 工程的 DeptController Consumer
/测试 @EnableDiscoveryClient, 消费端可以调用服务发现@RequestMapping(value=" / consumer/dept/discovery")
public 0bject discovery()
{
returnrestTemplate.getForobject(REST_URL_PREFIX+"/dept/discovery" , object.class);
}
微服务工程不是重点服务发现,只是对 Discoveryclient 对象的使用。
回到80号 controller
//测试 @EnableDiscoveryClient, 消费端可以调用服务发现
@RequestMapping(value = "/
c
onsumer/dept/discovery")public 0bject discovery()
{
return restTemplate.getForObject(REST_URL_PREFIX + "/dept/discovery",Object.class);
}
最终 consumer 说的为基准,最终为消费者提供服务。
/
c
onsumer/dept/discovery/dept/discovery
为
/dept/discov
ery
路径
相当于80用 consumer 消费者的路径访问了8001微服务提供者
现在启动80
80消费者,7001Eureka 服务注册中心,8001微服务的提供者
从客户端访问:
("services":["microservicecloud-dept"],"localServiceInstance : ('host":"192.168.11.1","port":8001," secure :false metadata" ;, "uri":"http://192.168.11.1:8001" ," serviceId" :"microservicecloud-dept"}}
让别人查询:通过8001做一个对外服务的窗口和rest进行访问,从而获得了解。