八、注册服务提供者

来源:互联网 发布:乐享下载软件 编辑:程序博客网 时间:2024/04/27 05:45

创建服务提供的客户端,并向服务中心注册,继续创建一个springBoot项目
首先,创建一个基本的Spring Boot应用。命名为eureka-client,在pom.xml中,加入如下配置
这里写图片描述

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.example</groupId>    <artifactId>demo</artifactId>    <version>0.0.1-SNAPSHOT</version>    <packaging>jar</packaging>    <name>demo</name>    <description>Demo project for Spring Boot</description>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.8.RELEASE</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>        <java.version>1.8</java.version>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <!--该模块能够自动为 Spring Boot 构建的应用提供        一 系列用千监控的端点-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-actuator</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-eureka</artifactId>        </dependency>        <!--<dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-eureka-server</artifactId>        </dependency>-->    </dependencies><!--服务注册中心-->    <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.springframework.cloud</groupId>                <artifactId>spring-cloud-dependencies</artifactId>                <version>Camden.SR6</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>    </dependencyManagement>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

其次,实现/dc请求处理接口,通过DiscoveryClient对象,在日志中打印出服务实例的相关内容

@RestControllerpublic class HelloController {    private final Logger logger = LoggerFactory.getLogger(HelloController.class);    //Eureka客户端    @Autowired    private EurekaClient eurekaClient;    //服务发现客户端    @Autowired    private DiscoveryClient discoveryClient;    /**     * 获得Eureka instance的信息,传入Application NAME     *     * */    @RequestMapping(value = "/hello",method = RequestMethod.GET)    public String index(){        ServiceInstance instance = discoveryClient.getLocalServiceInstance();        logger.info("/hello, host:" + instance.getHost() + ", service_id:" + instance.getServiceId());        return "hello world";    }}

这里写图片描述

最后在应用主类中通过加上@EnableDiscoveryClient注解,该注解能激活Eureka中的DiscoveryClient实现,这样才能实现Controller中对服务信息的输出。

这里写图片描述

package com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient//激活Eureka中DiscoveryClient实现@SpringBootApplicationpublic class DemoApplication {    public static void main(String[] args) {        SpringApplication.run(DemoApplication.class, args);    }}

我们在完成了服务内容的实现之后,再继续对application.properties做一些配置工作,具体如下:
这里写图片描述

通过spring.application.name属性,我们可以指定微服务的名称后续在调用的时候只需要使用该名称就可以进行服务的访问。eureka.client.serviceUrl.defaultZone属性对应服务注册中心的配置内容,指定服务注册中心的位置。为了在本机上测试区分服务提供方和服务注册中心,使用server.port属性设置不同的端口。
启动该工程后,再次访问:http://localhost:1111/。可以如下图内容,我们定义的服务被成功注册了。
这里写图片描述

遇到问题:
1、Whitelabel Error Page
@springBootApplication在进行加载时,只会加载其入口的当前目录及其子目录下的服务,如果存放在其它目录下,应用扫描不到。如下正确方式
这里写图片描述

2、
这里写图片描述

springcloud服务已经关但是Eureka还是显示up

该状态持续很久,访问该服务也返回错误,但在注册中心界面,该服务却一直存在,且为UP状态,并且在大约十分钟后,出现一行红色大字:EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
原因:自我保护机制。Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况(在单机调试的时候很容易满足,实际在生产环境上通常是由于网络不稳定导致),Eureka Server会将当前的实例注册信息保护起来,同时提示这个警告。

我是在本地调试的:
这是由于本地调试很容易触发注册中心的保护机制,这会使得注册中心维护的服务实例不那么准确。所以,我们在本地进行开发的时候,可以使用eureka.server.enable-self-preservation=false参数来关闭保护机制,以确保注册中心将不可用的实例正确剔除

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 太难了表情包 杰尼龟表情包 表情包输入法 土拨鼠表情包 qq表情动态图 动态搞笑表情 怎么做表情包 搞笑动态表情 手机qq表情包大全下载 怎么做表情包qq qq各个表情含义图解 qq表情含义图解对照表 qq表情包大全搞笑 我好方表情图 qq聊天表情包 搞笑的表情图片 聊天图片表情大全 qq动态表情包 动态表情包搞笑 制作表情的软件 表情包制作app 表情包怎么做 手机怎么做表情包 金馆长表情包 表情下载大全 做表情包的软件 qq表情的意思 qq搞笑表情包 动态表情下载 qq小表情包大全下载 搞笑动图表情 表情意思全解 表情包下载大全 搞笑的表情包 手机qq表情含义图解 搞笑表情图片 色色的表情包 真人表情图喜怒哀乐 手机qq表情意思全解 表情包大全搞笑 qq表情包下载