spring cloud微服务(二)搭建一个简易的微服务结构

今天我们将搭建一个最简易的微服务结构:serviceA+eureka+serviceB的结构。

(一)准备工作

在此之前,你需要会一些springboot基础,知道如何搭建springboot结构的项目。
此处为小白同学们提供一个基于搭建springboot+mybatis+oracle项目的学习链接:
https://blog.csdn.net/qq_38050852/article/details/83186799

(二)结构图

注册关系图

我们将搭建eureka-server端,然后搭建serviceA和serviceB作为eureka的客户端注册到eureka服务端,并完成serviceB调用serviceA。

(三)搭建eureka-server

该项目基于IDEA搭建。

1.新建一个工程

2.起个名字

3.选版本,选依赖

4.选项目位置,结束

5.打开application.properties进行编写


图示

代码如下:
#服务端口号
server.port=8761
#服务名称 (若是集群的服务名称要相同)
spring.application.name=eureka
#eueka注册中心ip
eureka.instance.hostname=127.0.0.1
#是否需要注册到注册中心(如果只有单个eureka,由于自己就是注册中心,是不需要自己注册自己的,所以是false。如果是集群,由于需要相互注册,就需要置为true)
eureka.client.register-with-eureka=false
#是否需要发现服务信息(集群的时候需要相互注册为true,单个服务为false,理由同上)
eureka.client.fetch-registry=false
#注册地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
#本地开发时关闭自我保护机制,不可用服务及时剔除
eureka.server.enable-self-preservation=false
#本地开发时关闭自我保护机制,不可用服务及时剔除,间隔2秒钟发现服务不可用即剔除
eureka.server.eviction-interval-timer-in-ms=2000

6.启动项加上允许作为eureka服务端的注解@EnableEurekaServer
图示

7.运行启动项
运行成功

8.运行成功后可进行页面访问
eureka页面

至此,eureka服务端搭建完毕,我们快快再搭几个服务注册进去吧~

我们总结一下eureka服务端的三个关键点:

一个是我们在建项目时选的Eureka Server依赖,IDEA自动帮我们生成了pom.xml,当然如果不选我们也可以自己手动加进去,如图
eureka-server依赖

再一个是我们的application.properties文件的配置;

最后一个便是启动项上的@EnableEurekaServer注解。
掌握这三点,搭建eureka服务端便不在话下。

注意事项:关于为何推荐IDEA勾选依赖生成pom文件:为何不手动添加依赖呢?由于springboot还不够稳定,1.5版本跟2.x版本依赖名称区别很大。再加上springboot版本跟springcloud版本一致性问题,依赖的名称多多少少会因为版本问题导致不一致。具体踩坑参见我的有道云笔记:
http://note.youdao.com/noteshare?id=25494c1f03d25c090010d267f0709df9&sub=A72B88850DB144E8B2F66E477F96C65B
新人没有必要在版本问题上浪费过多时间,所以个人推荐IDEA勾选生成pom

(四)搭建service-a和service-b并注册到注册中心

1.新建工程


2.项目元数据

3.选依赖的时候,本期我们用到的是 web依赖eureka客户端依赖feign远程调用依赖,其他依赖我们后续再手动加。
选依赖

5.配置application.properties

#端口号
server.port=8081
#服务名称
spring.application.name=service-a
##======================eureka=====================##
#是否以ip地址进行注册
eureka.instance.prefer-ip-address=true
#是否注册
eureka.client.register-with-eureka=true
#是否需要从eureka上获取信息
eureka.client.fetch-registry=true
#注册地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
#心跳检测与续约时间(本地开发时将时间设置小些,保证服务关闭后注册中心及时剔除服务)
#eureka客户端向服务端发送心跳的时间间隔,单位为秒
eureka.instance.lease-renewal-interval-in-seconds=1
#eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,超过则剔除
eureka.instance.lease-expiration-duration-in-seconds=2
##======================eureka=====================##

6.启动项加上允许作为eureka客户端的注解@EnableEurekaClient并启动项目


启动成功

7.打开euraka-server的界面,我们发现,serviceA已经注册到eureka了
eureka界面

8.我们以同样的步骤创建serviceB并启动,将serviceA和serviceB都注册到eureka服务端。
eureka界面

至此服务注册我们已搭建完毕~

我们总结一下eureka客户端的关键点:
一个是我们在建项目时选的Web依赖和Eureka Client依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

feign依赖用于远程调用暂且我们还没用到,只是建项目的时候顺手生成了一下;
再一个是我们的application.properties文件的配置和启动项上的@EnableEurekaServer注解。

(五)基于feign实现service-a和service-b之间的远程调用

0.关于依赖,我们需要引入feign依赖。由于之前我们创建项目的时候勾选了feign依赖,IDEA已自动帮我们生成了feign依赖。没有依赖的小伙伴可以手动添加进去

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

1.需求:我们来假设一个场景,我们的serviceA的controller只能输出“张三”,而serviceB需要调用serviceA的“张三”再加上自己本身输出的“正在工作”从而输出一句完成的话“张三正在工作”。

示意图如下:
需求示意图

2.在serviceA和serviceB项目分别建立controller和feign文件夹

(注意:此处只做简单的controller层代码示范,service层代码及dao层代码不实现)

3.在A服务创建AController


AController.java

4.在B服务创建BController
BController.java

5.在服务B创建专门调用A服务的feign接口,命名为AFeign.java
AFeign.java

注意接口要与AController.java一致、@FeignClient注解的value要与A服务的注册中心服务名一致。

6.在BController调用AFeign
feign调用

7.在需要用feign调用的项目的启动项上加上@EnableFeignClients注解,该示例中由于是B服务需要调用A服务,所以B的启动项上需要加上允许作为Feign客户端的注解@EnableFeignClients
B服务的启动项

8.分别启动eureka,service-a,service-b,进行测试

调用A服务的getWho方法:
getWho

调用B服务的getWhatDoing方法:
getWhatDoing

调用B服务的getAll方法:
getAll

至此服务调用我们已搭建完毕~

微服务最基础的结构我们已经了解了,下次我们将学习服务容错hystrix。

最后为了方便大家学习,附上github源代码。
https://github.com/mengyuya/springcloud-teach-2-demo

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

推荐阅读更多精彩内容