最近一直在看spring的一些框架, 前面发布了一些关于springboot的文章, 然而学习是不能止步的. 学习多了才发现学习还是蛮有意思的.后面一段时间会持续更新一些关于springcloud的文章;
下面是我github的一个demo仅供参考,后续我会将spring cloud的内容继续完善;
spring_cloud_demo
1.什么是Eureka
Eureka是Netflix开发的服务发现框架, 本身是一个基于REST的服务;(这里我们在请求时候基本运用的是RESTful风格的URL, 后面会说道)
Eureka包含两个组件:Eureka Server和Eureka Client。
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
如图有三个模块,
1.服务发现组件: 这个就是Eureka service, 消费者和服务者都要在该服务器上注册,只有在这个服务上注册的才可以相互进行数据交流
2:服务消费者: 调用方, 例如查看订单下的所有商品, 现在订单系统是一个服务器, 商品系统是一个服务器; 我只能拿到订单号, 找到订单下的商品的id, 为了得到商品信息, 只有拿着这些商品id去商品服务上去找商品.
3.服务提供者: 被调用方, 2中说道的商品服务,为订单系统调用提供数据.
2.spring cloud
当你学习过spring springMVC后你会发现, spring后面出的框架都是在这些基础上进行叠加, 对其他框架进行整合, 去其糟粕,取其精华;
spring cloud, 基于spring boot之上进行开发, cloud将许多优秀的框架进行对spring的兼容, 并二次封装,让使用者更加方面的调取服务;spring boot是spring cloud的基础; 一会boot, 一会cloud 是不是很乱; 如果还不会使用spring boot的请左转 手把手教你springboot快速整合mybatis;
3.创建一个Eureka服务端
废话不多说了,下面进入正题;
3.1添加依赖
pom.xml
<!-- 这里可以用IDEA进行快速创建spring boot项目 -->
<parent>
<!--spring boot 基础依赖-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
<relativePath/>
</parent>
<!-- 使用dependencyManagement进行版本管理
spring cloud里面整合了大量的框架, 使用这个对里面的依赖进行统一管理
-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 引入eureka server依赖 -->
<dependencies>
<!-- 引入eureka server依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
3.2添加注解
依赖我们加入后, 需要在spring boot的启动类中添加一个注解
package cn.cooplan.eurekaservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer //告诉spring boot启动Eureka的服务端
@SpringBootApplication
public class EurekaServiceApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServiceApplication.class, args);
}
}
3.3编写配置文件
eureka:
client:
register-with-eureka: false #false 不将本服务注册到eureka;(该项目为Eureka的服务端,只提供容器环境, 不进行调用)
fetch-registry: false #false 不从Eureka拉取资源
service-url:
defaultZone: http://192.168.0.101:8003/eureka/ #defaultZone在编写yml时候没有提示, 注意的是一定要驼峰命名,不然会找不到Eureka服务地址
instance:
prefer-ip-address: true #以IP地址注册到服务中心,相互注册使用IP地址
server:
port: 8003 #修改tomcat默认端口号, 因为在一台电脑进行演示, 避免端口冲突
3.4启动Eureka服务
启动spring boot就可以了, 启动spring boot的启动类;
浏览器访问:http://192.168.0.101:8003
当看到下面的页面, 说明你的Eureka服务启动成功
到着我们已经做了三分之一的工作,~ 下面是对消费者和生产者进行配置;
4.配置生产者和消费者
这里我们以订单系统为消费者, 商品系统为生产者;
创建order和goods两个spring boot应用, 添加spring cloud依赖, 添加依赖与3.创建一个Eureka服务端步骤一样;
4.1添加启动类注解, 编写yml文件
Eureka的服务端与客户端(生产者, 消费者)差异在启动类加的注解不一样, yml的配置参数不同;
下面举例一个order为例, 两者配置方法相同
4.2添加启动类注解
package cn.cooplan.order;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@EnableEurekaClient //开启Eureka客户端服务, 代表该服务是一个客户端
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
4.3编写yml文件
eureka:
client:
fetch-registry: true #true将服务添加到Eureka服务中
register-with-eureka: true #true允许从Eureka服务中获取数据, 进行交互
service-url:
#注意: defaultZone 一定要驼峰命名
defaultZone: http://192.168.0.101:8003/eureka/ #指向你的Eureka服务
server:
port: 8002
4.4启动Eureka客户端
同Eureka service一样启动spring boot的启动类; 注意的是, 先启动Eureka service服务, 不然客户端会找不到service报错
浏览器访问:http://192.168.0.101:8003
当看到下面的页面, 说明你的客户端已经注册到Eureka服务中
5.总结
这个时候我们的Eueka服务已经完成,
我们在使用spring cloud的时候, 实际上就是在写一个spring boot的项目; cloud只是将我们需要的分布式框架与spring整合, 并且更方便的调用;
以上内容是我在学习中自己摸索的, 如果有问题, 请留言;