本文共 6524 字,大约阅读时间需要 21 分钟。
所谓单体应用是指一个归档文件(如war文件)包含所有功能的应用,是一种应用广泛的传统项目架构,这种架构具有结构简单,部署方便的优点,当项目的规模不是很大,使用范围和并发量也都不是太大时,生产运转是比较平稳和正常的。但是,近些年随着移动互联应用的发展,项目呈现出应用场景丰富,规模、使用范围和并发量较大,单体应用架构的不足之处也越来越明显,主要有以下几方面:
为了解决单体应用架构的不足和问题,人们提出了微服务架构,这种微服务架构的基本思想是将一个大的应用系拆分成许多足够简单的小规模应用,每一个小应用就是一个微服务,每个微服务都独立开发和部署,与其它微服务没有直接关系,甚至每一个微服务使用的技术可以是不相同的。
微服务架构一般具有易于开发维护和部署、技术使用限制较少、可伸缩性好、可以实现高可靠高并发部署、并具有负载均衡能力等特点。一般微服务架构会包含以下组件。
在阅读本内容前,假设您已熟悉和掌握springboot方面知识和技能
创建maven项目(选择jar包)
在pom.xml中添加如下配置
1.8 Hoxton.RELEASE org.springframework.boot spring-boot-starter-parent 2.2.1.RELEASE org.springframework.boot spring-boot-devtools runtime true org.springframework.cloud spring-cloud-starter-netflix-eureka-server org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import org.springframework.boot spring-boot-maven-plugin
在application.yaml中配置如下
server: port: 8761eureka: client: register-with-eureka: false #当有多个eureka实例进行高可靠部署时,这里应当配置为true,即当前eureka实例做为其它eureka实例的客户端,并在其它eureka上注册 fetch-registry: false #当有多个eureka实例进行高可靠部署时,这里应当配置为true,即当前eureka实例从其它euraka上获同步获取注册信息 service-url: defaultZone: http://localhost:8761/eureka/ #设置eureka服务器的访问地址,在浏览器上访问eureka时地址栏上应当输入http://localhost:8761
开发主启动类
SpringBootApplication@EnableEurekaServer //此注解说明本应用为eureka服务器public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); }}
启动应用,在浏览器上访问http://localhost:8761,测试。
服务组件根据项目需要可以开发多个,所有的服务组件都应当作为eureka客户端在eureka上进行注册。这里以一个服务组件作为示例。
创建maven项目(选择jar包)
在pom.xml中添加如下配置
1.8 Hoxton.RELEASE org.springframework.boot spring-boot-starter-parent 2.2.1.RELEASE org.springframework.boot spring-boot-devtools runtime true org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import org.springframework.boot spring-boot-maven-plugin
在application.yaml中配置如下
server: port: 8081 logging: level: root: info web: tracespring: application: name: my-service #注册在eureka上的服务名eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ #配置注册访问eureka到标准 instance: prefer-ip-address: true #将客户端ip地址注册到eureka上,而默认将客户端主机明注册到eureka上
开发主启动类
@SpringBootApplicationpublic class MyServiceApplication { public static void main(String[] args) { SpringApplication.run(MyServiceApplication.class, args); }}
开发控制器
@RestControllerpublic class MyServiceController { @RequestMapping("/s1") public String s1() { return "我是服务One!"; } @RequestMapping("/s2") public Maps2() { Map map = new HashMap (); map.put("id", "001"); map.put("name", "名称"); map.put("salary", 8800); return map; }}
测试
启动应用,通过浏览器访问eureka,观察标题Instances currently registered with Eureka下到服务实例列表,是否存在MY-SERVICE,若存在说明注册成功。 接下来,在浏览器上通过地址http://localhost:8081/s1 或者 http://localhost:8081/s2 访问服务是否可以获取数据。网关组件运行后,所有的请求不必直接访问服务组件,而是可以通过网关代理,网关将做为客户端与服务端到统一交互界面。
网关也是一个eureka到客户端组件,亦需在服务器上注册。创建maven项目(选择jar包)
在pom.xml中添加如下配置
1.8 Hoxton.RELEASE org.springframework.boot spring-boot-starter-parent 2.2.1.RELEASE org.springframework.boot spring-boot-devtools runtime true org.springframework.cloud spring-cloud-starter-netflix-zuul org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import org.springframework.boot spring-boot-maven-plugin
在application.yaml中配置如下
server: port: 9999 logging: level: root: infospring: application: name: my-zuuleureka: client: service-url: defaultZone: http://localhost:8761/eureka/
开发主启动类
@SpringBootApplication@EnableZuulProxy //声明一个zuul代理(网关)public class ZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); }}
启动网关组件,进行测试
访问服务的路由规则为:http://<zuul主机地址>:<zuul端口号>/在eureka上注册到服务名/** 示例:http://localhost:9999/my-service/s1转载地址:http://tnhdi.baihongyu.com/