Eureka的细节(首页显示微服务名、外网访问显示正确ip、详情信息、服务发现)

一、首页显示的微服务名

  Eureka 首页显示的微服务名默认为:机器主机名:应用名称:应用端口,也就是:

${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id}:${server.port}

我们很难识别,自定义显示名字

在application.yml配置文件中修改参数:

#eureka相关配置
eureka:
  instance:
    hostname: 127.0.0.1  (这里没关系)
   #设置是否将自己作为客户端注册到注册中心(缺省true)
   #这里为不需要,查看@EnableEurekaServer注解的源码,会发现它间接用到了@EnableDiscoveryClient
    instance-id: userService-${spring.cloud.client.ipaddress}-${server.port}   

 二、给服务器一个正确的IP

  上面我们给服务指定了一个更顺眼的名字,但是当我们把鼠标移到上面时,

显示的是:http://localhost:8084/actuator/info

可读性太低了,这里理论上应该是显示该服务自身的 ip 才对,那么如何让这里的 ip 显示正常呢?

在application.yml配置文件中修改参数:

#服务信息显示的真实的ip, 开发中一定要设置为true, 如果不设置, 其他电脑访问不到你的服务
prefer-ip-address: true

 三、设置微服务的详细信息

 但是默认情况下,是没有微服务的信息的,它是一个空的

    显示{}

在大型项目中,微服务可能会有成百上千个,如果你没有填写微服务的信息,否则你的项目维护会非常痛苦。

填写微服务的信息

1、在你的微服务项目中添加actuator依赖,以及插件

<!-- 微服务的详细信息 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
插件:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
                <delimiters>
                    <delimiter>$</delimiter>
                </delimiters>
            </configuration>
        </plugin>
    </plugins>
</build>

2、在项目的配置文件中,填写该微服务的信息:

#服务的描述信息
info:
  app:
    name: helloServer-microcloud
  author:
    name: hhj
  build:
    artifactId: $project.artifactId$
    version: $project.version$
  company:
    name: www.zl.com
  server:
    port: ${server.port}

显示:

四、服务发现

  通过上面一些配置,这个服务的相关信息可以说比较友好了。但是还有个问题啊,

我公司别名起好了,地址也有了,也录入地图里了,但是我怎么能让外界知道这些信息呢?

我得有个公司主页吧,也就是说,得有个入口让别人知道这些信息才行。

我们需要暴露一个接口给外界,专门提供本服务的详细信息。

写一个接口,暴露给外界调用:

@RestController
@RequestMapping("/hello")
public class InfoController {
@Resource
private EurekaClient client;

private static final Logger LOGGER = LoggerFactory.getLogger(UserController.class);

@GetMapping("/discovery")
public Object discovery() {
    // 获取Eureka中所有的服务节点
    List<Application> applications = client.getApplications().getRegisteredApplications();
    if (applications != null) {
        for (Application application : applications) {
            // 对外暴露的服务名称
            String name = application.getName();
            // 只看hello服务信息
            if ("house-userService".equalsIgnoreCase(name)) {
                // 服务有多少个实例,比如订单服务可能部署了多个,有多个订单服务注册到了eureka
                List<InstanceInfo> instances = application.getInstances();
                LOGGER.info("所有的hello服务:{}", instances);
                if (instances != null) {
                    for (InstanceInfo info : instances) {
                        LOGGER.info("服务id:{}", info.getInstanceId());
                        LOGGER.info("服务主机:{}", info.getHostName());
                        LOGGER.info("服务端口:{}", info.getPort());
                    }
                }
                return instances;
            }
        }
    }
    return null;
}
}

需要引入 EurekaClient 端,在接口内部,通过 EurekaClient 获取到注册在 Eureka 上的所有 Application,

这里的 application 其实就是我们常说的服务节点,从而获取到服务节点的信息,

包括服务节点的名称、状态、IP、端口、心跳情况等信息。直接将服务的信息返回即可。

 

posted @ 2020-07-10 20:09  64Byte  阅读(1199)  评论(0编辑  收藏  举报