微服务架构和实践程序员

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

2019-01-21  本文已影响43人  不是绘梨衣

今天我们将搭建一个最简易的微服务结构: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

上一篇下一篇

猜你喜欢

热点阅读