如何在不知道端口和本机地址的情况下通过服务端查看客户端的信息

服务端有个配置
如何在不知道端口和本机地址的情况下通过服务端查看客户端的信息
在controller里面需要配置这个,这个有什么作用呢?

服务端和客户端和注册中心构成微服务,在服务端和客户端同时连接到注册中心进行微服务的时候,注册中心也在发射出信息得到服务端和客户端的反馈,也就是心跳,没发射几次心跳来检测服务端和用户端是否还在连接,是否还在工作

就拿滴滴平台来说,注册中心时不时向客户发送信息反馈,观察客户是不是在拉取服务,如果是,则派单给司机,如果不是,则关闭对客户的服务。同理。司机这一端也是有心跳的检测的。

在服务端这里封装这个方法有什么用处呢?
如何在不知道端口和本机地址的情况下通过服务端查看客户端的信息
首先,这个方法是来自pom文件的一个网关依赖,没有这个依赖你没办法封装好这个方法,而且这个方法是@Autowired,可以被直接调用

这个方法的作用就是,可以获取服务信息,那具体它是怎么获取的呢?

如何在不知道端口和本机地址的情况下通过服务端查看客户端的信息
看上面的图,要获取服务信息,我们需要用到一个列表,这是ServiceInstance服务表,因为我们大多数获取这个表的话是获取他们的服务表集群,一般公司不会只有一个客户端的表,所以用到了List去圈定它,然后调用DiscoveryClient的方法,去获得程序的名字,这个程序的名字是什么呢?

之前我有个博客说过,这个程序的名字就是客户端在配置yml文件的时候加进去的微服务名字,也就是application:name,这个就是客户端的名字,只要获取它的名字,客户端无论再怎么发生变化,只要我能够知道客户端的名字,我就肯定能够找到这个客户端并且获取它的服务信息。

如果不知道客户端的信息,只要程序都运行了,我们就可以在注册中心处可以查看各个程序对应的名字:
如何在不知道端口和本机地址的情况下通过服务端查看客户端的信息
这些就是它们的名字,找到客户端的名字并且写进去即可,然后我们的RestTemplate需要从客户端获取的东西就是一个host本机地址,还有一个port端口地址,把它们全部写进restTemplate的getForObject方法里面即可:instance.getHost(),instance.getPort()

执行结果
如何在不知道端口和本机地址的情况下通过服务端查看客户端的信息
还是能够获取的

这里说明一下,地址是访问服务端的controller地址,服务端的controller地址是这么写的,所以可以通过这种方式访问到它的controller,从而执行到它的方法,因为controller最后一个方法就是获取用户在网址上输入的对应id,来进行获取客户端的对应用户信息

最终执行成功