Spring Cloud微服务开发笔记
时间:2019-08-17
本文章向大家介绍Spring Cloud微服务开发笔记,主要包括Spring Cloud微服务开发笔记使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一.微服务架构
- SOA架构演变而来
- 解决了Webservice,ESB总线架构的性能差的问题
- 引入一个服务注册中心,(中心话服务注册中心)
- 不再使用xml传输数据,而是使用JSON来传输数据
- 将服务再进行一次精细化(细粒度服务组件),使用HTTP协议,使用RESTFul风格开发模式
⼆.微服务如何拆分的问题
2.1 原则
- 如果某⼀个模块不能再细分,职责很单⼀,那么就可以成为微
- 每⼀个服务运⾏在⼀个独⽴进
- 每⼀个服务有⾃⼰的⼀个数据库存储,缓存系统,消息队列..
2.2 微服务的原始⽂
https://www.cnblogs.com/liuning8023/p/4493156.html
三.SpringCloud微服务架构
3.1Spring Cloud概述
- Spring Boot基础之上开发的⼀套微服务框架。微服务完整解决⽅案。
- 服务治理、注册与发现、配置管理、跟踪管理、断路器,路由、负载均衡,控制总线,微代理...
- https://spring.io/projects/spring-cloud
- https://springcloud.cc/
- Spring Cloud⼏⼤组件(五⼤神兽)
- Spring Cloud Config:分布式配置中⼼
- Spring Cloud netflix
- Eureka:服务的发现与注册
- Hystrix:服务熔断,服务的保护
- Ribbon:负载均衡
- Feign:声明式服务调⽤组件
- Zuul:⽹关组件,提供智能路由
四.服务治理Eureka
4.1 服务的治理
- 服务之间的依赖关系,管理成本很⾼,需要有⼀个中间件(注册中⼼)来管理依赖关系
- 实现服务的发现与注册,服务调⽤,负载均衡,容错
4.2 服务的发现与注册
- 服务的提供⽅注册服务(注册中⼼)。当服务器启动时服务注册到注册中⼼(Eureka Server)。
- Eureka Server将服务地址进⾏维护。以别名的⽅式注册到注册中⼼
- 服务的消费⽅在注册中⼼上获取到服务列表
- 以RPC(HttpClient)调⽤服务
4.3 搭建注册中⼼
- 编写pom.xml
1 <parent> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-parent</artifactId> 4 <version>2.0.2.RELEASE</version> 5 <relativePath/> <!-- lookup parent from repository --> 6 </parent> 7 <groupId>com.zf.mo</groupId> 8 <artifactId>springcloud-eureka</artifactId> 9 <version>0.0.1-SNAPSHOT</version> 10 <name>springcloud-eureka</name> 11 <description>Demo project for Spring Boot</description> 12 13 <properties> 14 <java.version>1.8</java.version> 15 </properties> 16 17 <dependencies> 18 22 <dependency> 23 <groupId>org.springframework.cloud</groupId> 24 <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> 25 </dependency> 26 27 <dependency> 28 <groupId>org.springframework.boot</groupId> 29 <artifactId>spring-boot-devtools</artifactId> 30 <scope>runtime</scope> 31 <optional>true</optional> 32 </dependency> 33 <dependency> 34 <groupId>org.springframework.boot</groupId> 35 <artifactId>spring-boot-starter-test</artifactId> 36 <scope>test</scope> 37 </dependency> 38 </dependencies> 39 40 <dependencyManagement> 41 <dependencies> 42 <dependency> 43 <groupId>org.springframework.cloud</groupId> 44 <artifactId>spring-cloud-dependencies</artifactId> 45 <version>Finchley.SR2</version> 46 <type>pom</type> 47 <scope>import</scope> 48 </dependency> 49 </dependencies> 50 </dependencyManagement> 51 52 <build> 53 <plugins> 54 <plugin> 55 <groupId>org.springframework.boot</groupId> 56 <artifactId>spring-boot-maven-plugin</artifactId> 57 </plugin> 58 </plugins> 59 </build>
- 编写application.properties/application.yml
1 server.port=8080 2 #服务名称 3 spring.application.name=springcloud-eureka 4 eureka.instance.hostname=127.0.0.1 5 #服务注册中心地址 6 eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/ 7 #false 服务注册中心不注册自己 8 eureka.client.register-with-eureka=false 9 # false服务注册中心不检索自己 10 eureka.client.fetch-registry=false
- 运⾏启动类
1 @SpringBootApplication 2 @EnableEurekaServer 3 public class SpringcloudEurekaApplication { 4 5 public static void main(String[] args) { 6 SpringApplication.run(SpringcloudEurekaApplication.class, args); 7 } 8 9 }
4.4服务提供者搭建
- pom文件
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.zf.mo</groupId> <artifactId>springcloud-producer</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springcloud-producer</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR2</spring-cloud.version> </properties> <dependencies> <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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </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>
- 编写application.properties/application.yml
server.port=8180
spring.application.name=springcloud-producer
#服务注册中心地址
eureka.client.service-url.defaultZone=http://127.0.0.1:8080/eureka/
#服务可注册
eureka.client.register-with-eureka=true
#服务可检索
eureka.client.fetch-registry=true
- 运⾏启动类
@SpringBootApplication @EnableDiscoveryClient public class SpringcloudProducerApplication { public static void main(String[] args) { SpringApplication.run(SpringcloudProducerApplication.class, args); } }
原文地址:https://www.cnblogs.com/zhoufly-blog/p/11343012.html
- NoSQL和数据可扩展性
- 使用NGINX和NGINX Plus速率限速
- 独家 | 教你用Scrapy建立你自己的数据集(附视频)
- 浏览器平台:Internet Explorer 8
- ASP.NET MVC 1.0 RC 那些事
- 优化SQLServer——表和分区索引(二)
- 关于UNPIVOT 操作符
- XML 在SQLServer中的使用
- 在asp.net mvc上应用新ASP.NET图表控件
- 自定义Unity对象生命周期管理集成ADO.NET Entity Framework
- Mono运行于IPhone之上
- Apache Hadoop入门
- 参数化(三):参数嗅探
- 什么是内存数据库以及它如何有效保存数据
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- thinkPHP5框架接口写法简单示例
- php实现数组重复数字统计实例
- php提取微信账单的有效信息
- php使用pecl方式安装扩展操作示例
- RSA实现JS前端加密与PHP后端解密功能示例
- Laravel源码解析之路由的使用和示例详解
- Linux中crontab输出重定向不生效问题的解决办法
- PHP swoole和redis异步任务实现方法分析
- thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
- 教你一招实现Linux中的文本比对
- PHP基于swoole多进程操作示例
- PHP格式化显示时间date()函数代码
- php函数式编程简单示例
- php进程(线程)通信基础之System V共享内存简单实例分析
- Laravel5.1 框架数据库查询构建器用法实例详解