Spring-Cloud-Eureka-服务发现与注册

一、简介

        1.概念:

                在微服务架构下,一个服务自动定位 到被调用的服务的过程称为服务发现。

        2.目的:

                我们约定提供服务的一方,即RPC的服务端,称为服务提供者
                调用或说使用服务的一方,即RPC的客户端,称为服务消费者

                1. 服务消费者上线时,能够发现合适的服务提供者
                2. 当某个服务提供者上线时,消费者能够获悉服务的存在
                3. 服务提供者实例发生变动不可用时(如故障 或者重新发布而不可用),消费者得到通知,停止对其调用
                4. 新增服务实例可以被消费者使用,跟第一条不同的是,这里是扩展操作,即为一个已有服务增加实例(如3台服务器变成4台服务器)

        3.环节:

                1.服务注册,提供者将服务公之于众,让服务消费者可以知晓服务的状态
                2.服务下线,提供者声明服务不再可用,后续不再调用该服务
                3.服务查询,消费者可以查询到所需调用的服务的地址、端口等等信息,以用于调用
                4.服务健康检查,需要知晓服务提供者当前是否可用,如果不可用则不再对外提供服务
                5.服务通知,当服务状态发生变化时确保消费者知晓,则需要通知消费者

        4.过程:

                有服务注册表组件作为中间人,然后服务提供者启动时会将服务注册到服务注册表中,当服务调用者需要调用服务时则从服务注册表中查找相应的服务并调用。这就是服务发现的过程。具体步骤如下:
                ①服务提供者启动时,将服务注册到服务注册表
                ②服务消费者启动时拉取服务列表
                ③服务消费者需要调用时从服务注册表中选择合适的服务并调用
                ④服务注册表检测服务提供者的健康状况并更新服务列表
                ⑤当服务健康状态发生改变时通知客户端更新服务列表

服务发现步骤

二、Eureka


Eureka

        1.Eureka简介:

                1.Eureka是NetFlix开源的一款服务发现组件。Spring Cloud对其进行了封装。
                2.Eureka基于 REST(Representational State Transfer) 协议通信
                3.Eureka不存储任何信息,而是使用客户端心跳推送的方式来做健康检测,也就是Eureka Client会在指定间隔时间内发送一段信息给服务端,服务端据此确认服务的健康性

        2.主要组件:

                1.Eureka-Server,独立部署的系统,负责管理服务信息(接收服务注册、检测服务是否存活),支持配置成集群,保证高可用
                2.Eureka-Client,集成在服务中(服务提供与消费者都有集成),与Eureka-Server通信,执行服务注册、获取服务列表等

三、Eureka-Server搭建

        1.步骤:
               ①IDEA中执行以下操作:File>New Project>Spring Initalizr进入如下界面,点击 Next

                ②填写Maven坐标GAV、项目描述等,Next

                ③选择相应的依赖,这里很简单,选择Eureka-Server即可,Next

                ④选择相应的依赖,这里很简单,选择Eureka-Server即可,Next

                ⑤选择项目存放位置后,完成项目,在当前窗口打开项目,此时Maven会下 载项目依赖,稍等片刻后项目即创建完成。

        2. 搭建项目:

                生成的项目,是标准的Spring Cloud项目,与其他Spring Boot项目pom.xml文件有不同的地方:
①:依赖管理部分导入了SpringCloud的依赖管理BOM,可以直接引用Spring-Cloud各个 组件而不需要添加版本号
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
②:引用了Spring-Cloud的组件, 这里引入了Eureka-Server
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
 </dependency>

        3.添加注解:

                项目虽然引入了Eureka-Server的包,但还未启用该功能,我们通过给Application添加注解来启动Eureka-Server功能。
@SpringBootApplication
@EnableEurekaServer//启动EurekaServer功能
public class EurekaserverApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaserverApplication.class, args);
    }
}

        4.添加配置:

                给Eureka-Server添加一些必要的配置。Spring-Boot的外化配置特性,配置文件统一放在resources/application.properties中。配置如下:
#项目信息
spring.application.name=eurekaserver
server.port=9600
#单机模式配置
#服务器名
eureka.instance.hostname=localhost
#是否注册到Eureka-Server,Eureka-Server本身也可以是Client,所以有此选项,这里默认关闭
eureka.client.register--with-eureka=false
#是否拉取服务列表,同上因为是Server所以不需要拉取列表
eureka.client.fetch-registry=false
#client的服务地址,server的地址是自己
eureka.client.service-url.defaultZone=
http://${eureka.instance.hostname}:${server.port}/eureka/

        5.启动并查看项目:

                运行Application,服务启动日志没有报错即表示启动成功。 此时访问 localhost:9600可以看见Eureka-Server的Web界面

成功界面

四、Eureka Client搭建

        1.简介:Eureka-Client其实是包含在项目中的,分成服务提供者和服务消费者两个角色。我们假设这里有个电影评分服务,显然电影网站(movie)就是服务消费者,评分服务(rating)就是服务提供者了。需要分别创建movie项目和rating项目都要包含eureka-client,并通过配置指向同一个eureka-server。

        2.搭建rating服务(服务提供方):
                ①创建项目:参考Eureka-Server搭建
                ②添加配置 :
                        #应用信息
                        spring.application.name=rating
                        server.port=9501
                        #Eureka配置,主要是Eureka-server的地址
                        eureka.client.service-url.defaultZone=http://localhost:9600/eureka
                ③添加评分功能 :
                        @RestController
                        public class RatingController {
                            @RequestMapping("rate")
                            public int rate(String movieName){
                                    return movieName.length();
                            }
                        }
                ④启动&访问验证 :和Eureka-Server搭建的第3步添加注解一样

        3.搭建movie项目(服务消费方):
                ①创建项目:参考Eureka-Server搭建
                ②添加配置:
                        #应用信息
                        spring.application.name=movie
                        server.port=9502
                        #Eureka配置,主要是Eureka-server的地址
                        eureka.client.service-url.defaultZone=http://localhost:9600/eureka
                ③添加调用评分服务的代码
(1)先配置一个 RestTemplate用于调用远程服务:
@Configuration
public class AppConfig {
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
(2)评分服务的代码:
@RestController
public class MovieController {
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private EurekaClient discoveryClient;
    @RequestMapping("movie")
    public String showMovie(String movieName, ModelMap modelMap){
        InstanceInfo instance = discoveryClient.getNextServerFromEureka("rating",false);
        String serviceUrl= instance.getHomePageUrl();
        System.out.println(serviceUrl);
        int credit = restTemplate.getForObject(serviceUrl+"/rate?movieName="+movieName,Integer.class);
        return "电影【"+movieName+"】的评分为"+credit;
    }
}
                ④启动&访问验证:和Eureka-Server搭建的第3步添加注解一样

        4.运行结果

运行结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342