SpringBoot与SpringCloud集成
简介
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
关于微服务相关文档可以点击此处查看。
常用组件
- 服务发现——Netflix Eureka
- 客服端负载均衡——Netflix Ribbon
- 断路器——Netflix Hystrix
- 服务网关——Netflix Zuul
- 分布式配置——Spring Cloud Config
在后续的学习中,会给大家继续介绍。
步骤
创建项目
项目结构如下,eureka-server外,在创建项目时选中Eureka Server 其余都应该为Eureka Discovery
pom文件配置
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
<?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.20.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.hph</groupId> <artifactId>eureka-server</artifactId> <version>0.0.1-SNAPSHOT</version> <name>eureka-server</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Edgware.SR5</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <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> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> |
在eureka-server中我们添加application.yml配置文件。
12345678910 |
server: port: 8761eureka: instance: hostname: eureka-server # eureka实例的主机名 client: register-with-eureka: false #不把自己注册到eureka上 fetch-registry: false #不从eureka上来获取服务的注册信息 service-url: defaultZone: http://localhost:8761/eureka/ |
在EurekaServerApplication中我们添加@EnableEurekaServer 注解
123456789101112131415 |
package com.hph.eurek; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer //添加@SpringBootApplicationpublic class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } } |
启动项目
provider
下面我们来编写provider项目代码
pom文件配置如下
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
<?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.20.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.hph</groupId> <artifactId>provider-ticket</artifactId> <version>0.0.1-SNAPSHOT</version> <name>provider-ticket</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Edgware.SR5</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <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> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> |
创建服务
项目结构如图所使
123456789 |
package com.hph.provider.service; import org.springframework.stereotype.Service; @Servicepublic class TicketService { public String getTicket(){ return "《复仇者联盟4:终局之战》"; } |
配置视图控制器
12345678910111213141516171819 |
package com.hph.provider.controller; import com.hph.provider.service.TicketService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController; @RestControllerpublic class TicketController { @Autowired TicketService ticketService; @GetMapping("/ticket") public String getTicket() { return ticketService.getTicket(); }} |
编写配置文件
12345678910111213 |
server: port: 8001spring: application: name: provider-ticket eureka: instance: prefer-ip-address: true # 注册服务的时候使用服务的ip地址 client: service-url: defaultZone: http://localhost:8761/eureka/ |
启动服务
再去查看一下服务端
服务成功注册。
我们可以更换服务端口把它打成jar包实现多服务的注册测试。
consumer
consumer端项目结构如下
1234567891011121314151617181920212223 |
package com.hph.consumer; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.context.annotation.Bean;import org.springframework.web.client.RestTemplate; @EnableDiscoveryClient //开启发现服务功能@SpringBootApplicationpublic class ConsumerUserApplication { public static void main(String[] args) { SpringApplication.run(ConsumerUserApplication.class, args); } @LoadBalanced //使用负载均衡机制 @Bean public RestTemplate restTemplate() { return new RestTemplate(); }} |
123456789101112131415161718192021 |
package com.hph.consumer.controller; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate; @RestControllerpublic class UserController { @Autowired RestTemplate restTemplate; @GetMapping("/buy") public String buyTicket(String name) { //此参数为注册在Eureka中的服务 String ticketName = restTemplate.getForObject("http://PROVIDER-TICKET/ticket", String.class); return name + "购买了" + ticketName; }} |
启动后我们发现在Eureka上注册了另外一个服务
测试
我们访问consumer8200端口的buy方法。我们可以说这个服务时负载均衡的。它使用了轮询的方式。
后续会继续学习关于SpringClould的相关知识。
SpringBoot与SpringCloud集成相关推荐
- Spring、SpringMVC、SpringBoot、SpringCloud的联系和区别
一. 上一篇文章刚刚简单介绍了spring框架,下面我将介绍一下Spring,SpringMVC,SpringBoot,SpringCloud的联系和区别. 首先先简单介绍一下各个框架. Spring ...
- 【面试题】Spring,SpringMVC,SpringBoot,SpringCloud有什么区别和联系?
介绍 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.基础版本只有 2 MB 左右的大小,Spring使你能够编写更干净.更可管理.并且更易于测试的代码. SpringMV ...
- spring、springMvc、springBoot和springCloud的联系与区别
作者:尘光掠影 来源:CSDN 原文:https://blog.csdn.net/alan_liuyue/article/details/80656687 spring和springMvc: 1 ...
- SpringBoot与SpringCloud的关系与区别
一.SpringBoot和SpringCloud简介 1.SpringBoot:是一个快速开发框架,通过用MAVEN依赖的继承方式,帮助我们快速整合第三方常用框架,完全采用注解化(使用注解方式启动Sp ...
- Spring、SpringMVC、SpringBoot、SpringCloud的关系分享
最近在做一些技术架构原型,发现Spring已经跟三四年前发生了很多的区别,技术的迭代日新月异,再不学习就赶不上时代的脚步 ,以下是最近关于Spring.SpringMVC.SpringBoot.Spr ...
- SpringCloud集成Security安全(Config配置中心)
1.说明 为了保护配置中心的敏感数据, 需要对Config Server进行安全保护, 本文基于Spring Security方案, 为Config Server增加最简单的Basic安全认证. 2. ...
- 史上最简单:SpringCloud 集成 mybatis-plus(以若依微服务版本为例)
编者按:若依微服务版是基于Spring Boot.Spring Cloud & Alibaba的微服务的权限管理系统,也是笔者比较推荐的个人学习和企业实践都比较优秀的开源项目. 笔者也以此项目 ...
- SpringBoot和SpringCloud配置
SpringBoot和SpringCloud配置 一.springBoot配置 1.1.yml 1.2.pom 1.3.RestTemplate 二.注册中心 Spring Cloud Eureka ...
- 不服不行啊,华为P8确实把SpringCloud集成Dubbo给一次性讲透了
Spring Cloud集成Dubbo 目前Dubbo在国内还是有较多公司在使用的,一方面是因为Dubbo作为阿里巴巴开源的一个SOA服务治理解决方案,在国内发展较早,有比较好的先发优势:另一方面是因 ...
最新文章
- linux拷贝文件夹怎么删除,linux文件及文件夹拷贝移动删除
- 【Go API 开发实战 1】该教程所实现的 API 功能
- IdentityServer4系列 | 简化模式
- 安卓拍照上传php服务器,Android拍照上传至PHP服务器并写入MySql数据库(下)
- 将列表打印为表格数据
- 使用git bash提交代码到github托管
- 怎么改掉科学计数法_宝宝口唇干裂怎么回事?该怎么办?
- Vue —— 移动端添加 fastclick
- Linux-设备驱动概述
- p1 p 0xf在c语言中啥意思,单片机中的P1=0xfe什么意思
- MQTT 基础--MQTT 协议简介 :第 1 部分
- Prettier formatter for vscode 配置单引号问题
- 一些实用的电脑小技巧(1)
- 『每日AI』马化腾丨中国互联网已从C2C进化为KFC!
- python爬取豆瓣电视剧页面
- CanOpen通信协议python实现
- 尚学堂j2ee视频教程
- Matlab求时变微分方程组解,Matlab求常微分方程组的解析解
- 手机号注册过,被遗忘的网站有哪些?
- 1.2 随机事件及其概率
热门文章
- [CF741D] Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths
- 【Linux】awk指令
- ASP.NET MVC 4 内容映射
- 【C/S】FIPS安全验证问题
- window.open被浏览器拦截的解决方案
- 去除utf8文件的bom标记
- hdu 2586 How far away? (LCA模板)
- 《从强盗资本家到慈善家》--转载自思维的乐园
- linux磁盘管理的命令行,Linux磁盘管理命令
- python元组和集合的区别_python 元组与list的区别