Spring Cloud构建微服务
来源:互联网 发布:中国出口武器 知乎 编辑:程序博客网 时间:2024/05/20 06:25
这个文章的目的不在于展示一个完整的项目,主要是为了提供一种思路,一种利用spring boot以及spring cloud相关技术构建微服务系统 所以有些细节部分不会太详实,还请见谅
首先了解下项目结构
请忽略config-service,这里先不说这个
pom.xml配置
<!--这里只写出比较重要的配置,模组依赖的配置这里就不写了,不明白的可以先看看maven相关知识--><dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</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>Brixton.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies></dependencyManagement>
discovery-service
discovery-service目录结构如下,主要就是一个Java类,外加两个yml配置文件
DiscoveryApplication.java 内容如下 注解SpringBootApplication是@Configuration @EnableAutoConfiguration @ComponentScan三个注解的集合 注解EnableEurekaServer表明这是一个Eureka Server,用于服务的注册
@SpringBootApplication@EnableEurekaServerpublic class DiscoveryApplication { public static void main(String[] args) { SpringApplication.run(DiscoveryApplication.class,args); }}
bootstrap.yml配置如下,这里只配置了服务的名字叫 discovery
spring: application: name: discovery
application.yml配置如下server.port配置了tomcat的启动端口,eureka实例的名字,以及eureka其他配置。因为我们这里是eureka服务端,register-with-eureka配置为false,这个配置表示是否将其本身注册到eureka server以被其他发现fetch-registry配置为false,这个配置表示是否需要从eureka server中抓取eureka上的注册信息defaultZone 默认地址为 http://localhost:8761/eureak
server: port: 8761eureka: instance: hostname: discovery client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://discovery:${server.port}/eureka/spring.cloud.config.discovery.enabled: true
category-service
category-service 目录结构大致如下,这里我们主要说明下CategoryController.java、CategoryApplication.java、application.yml、bootstrap.yml的内容。
CategoryController.java内容如下,主要就是对外提供服务,通过访问地址 /v1/category
@RestController@RequestMapping("/v1")public class CategoryController { private static final Logger LOGGER = LoggerFactory.getLogger(CategoryController.class); @Autowired CategoryService categoryService; @RequestMapping("/category") public List<Category> getCategory() { LOGGER.info("哇塞~鸟人哎哎哎哎"); return categoryService.getCategory(); }}
CategoryApplication.java主要内容如下,最重要的就是@EnableEurekaClient表示这是个eureka client,这个应用将会被注册到eureka server,这个应用的端口是什么?注册到哪个eureka server?带着这些疑问,待会我们看application.yml
@SpringBootApplication@EnableEurekaClientpublic class CategoryApplication { public static void main(String[] args) { SpringApplication.run(CategoryApplication.class,args); }}
application.yml如下,server.port配置的端口为0表明启动这个项目之后,会自动为其分配一个可用端口,如果我们把这个应用打成一个可执行jar包,在不重新指定端口的情况下,只会有一个程序能正常工作哦。defaultZone 指明了该服务注册的地址,服务将会被注册到这个地址上ribbon.eureka.enabled 默认情况即为true,这里不配置也无所谓
server: port: 0eureka: client: serviceUrl: defaultZone: http://discovery:8761/eureka/instance: preferIpAddress: trueribbon: eureka: enabled: true
bootstrap.yml配置如下,这里配置了服务的名字叫catelog-service,其他啥都没有哦
spring: application: name: catalog-service
gateway-service
gateway-service项目结构如下,gateway主要是为了统一暴露接口而生,服务众多的情况下,对前端来讲,我不需要记住那么多的域名地址来调用API,我需要记住的只是gateway的地址就行。
Application.java内容如下,最主要的其实就是@EnableSidecar,这个东西他提供了一个jsp页面。通过这个页面我们可以知道gateway以及其他在eureka server上注册的服务的健康状况,并且这个注解包含了@EnableZuulProxy,所以呢,它也支持软负载均衡,如果启动多个服务,通过gateway来调用这个接口,多次调用我们会发现,请求会落在不同的服务上
@SpringBootApplication@EnableSidecarpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}
application.yml如下,里面主要多了一个endpoints配置和sidecar的端口配置,endpoints是为了监控系统才有的配置,具体可以参看AbstractEndpoint.java的实现类。sidecar的端口这里配置的是80,其他端口也是可以的bootstrap.yml就不提了,因为里面只有服务的名字,和上面的类似
server: port: 10000endpoints: restart: enabled: true shutdown: enabled: true health: sensitive: falseeureka: instance: hostname: gateway client: registerWithEureka: true fetchRegistry: true serviceUrl: defaultZone: http://discovery:8761/eureka/sidecar: port: 80
如何查看服务的健康状况?
答: 就本例来说,我们访问地址http://gateway:10000/来了解gateway的情况,如果要知道catelog-service的情况我们就访问http://gateway:10000/hosts/catalog-service地址。hosts后面跟我们的服务的名字即可
spring boot如何创建一个可执行的jar包
答:在服务端的pom文件中增加插件spring-boot-maven-plugin。参考文档http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/
如何通过gateway来访问其他服务
答:举例,如果我们要通过gateway来访问catalog-service服务,那么我在浏览器里面输入http://gateway:10000/catalog-service/v1/category这里的/v1/category是由catalog-servicel来决定的,catalog-service则是服务的名字
PS: 一些截图
参考文档
【1】http://jinnianshilongnian.iteye.com/blog/1902886
【2】http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/
- Spring Cloud构建微服务
- Spring Cloud和Docker构建微服务
- Spring Cloud构建微服务架构
- 11、Spring Cloud构建微服务架构
- Spring Cloud和Docker构建微服务
- 介绍Spring Cloud构建微服务架构
- Spring Cloud和Docker构建微服务
- 【Spring Cloud】Spring Cloud构建微服务架构
- spring boot 和spring cloud 构建微服务系统
- Spring Cloud微服务
- spring cloud 微服务
- Spring Cloud和Docker 来构建微服务
- 用Spring Cloud和Docker构建微服务
- Spring Cloud构建微服务架构(五)服务网关
- Spring Cloud构建微服务架构(二)服务消费者
- Spring Cloud构建微服务架构(三)断路器
- Spring Cloud构建微服务架构(五)服务网关
- Spring Cloud构建微服务架构(二)服务消费者
- svm常用核函数
- 彻底解决Android 拍照 内存溢出 Out of Memory的问题
- Oracle大数据常见优化查询
- Universal-Image-Loader源码阅读(29)-BitmapDisplayer
- poj1159
- Spring Cloud构建微服务
- Java编程的动态性(author Dennis M. Sosnoski )学习——学习笔记(1)
- 一个简单的volley网络请求
- 如何在linux下查看目录的剩余空间大小
- 删除链表中的重复元素
- java基于spring框架上传文件
- 写时拷贝
- 都在做百度SEO,你是否真的了解百度?
- [转]【坐在马桶上看算法】算法2:邻居好说话:冒泡排序--作者:ahalei