SpringCloud服务注册发现(服务治理)之Consul学习笔记步步截图(附带学习时写的源码项目)
SpringCloud
整个spring cloud学习时写的项目源码:git@gitee.com:HumorChen/spring-cloud-parent.git
上一篇博客为:eureka(服务治理)SpringCloud服务注册发现(服务治理)之Eureka学习笔记步步截图(附带学习时写的源码项目)
读这篇博客前先下载上面的git项目。
初识Spring Cloud
什么是微服务
- "微服务”一词源于Martin Fowler的名为Microservices的博文,可以在他的官方博客上找到
http://martinfowler.com/articles/microservices.html - 微服务是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间一般通过HTTP的RESTfuLAPI进行通信协作。
- 被拆分成的每一个小型服务都围绕着系统中的某一项或些耦合度较高的业务功能进行构建,并且每个服务都维护着白身的数据存储、业务开发自动化测试案例以及独立部署机制。
SpringCloud简介
-
spring cloud 是一系列框架的有序集合
-
spring cloud 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟的、经得起实际考验的框架组合起来
-
通过Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包
-
它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务注册发现、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
-
Spring Cloud版本命名方式采用了伦敦地铁站的名称,同时根据字母表的顺序来对应版本时间顺序,比如:最早的Release版本: Angel,第二个Release版本: Brixton,然后是Camden、Dalston、Edgware,Finchley,Greenwich,Hoxton
-
spring cloud版本和springboot版本对应关系
Spring Cloud 与Dubbo对比
- Spring Cloud 与 Dubbo都是实现微服务有效的工具。
- Dubbo只是实现了服务治理,而Spring Cloud子项目分别覆盖了微服务架构下的众多部件。
- Dubbo使用RPC通讯协议,Spring Cloud使用RESTful完成通信,Dubbo效率略高于Spring Cloud。
小结
- 微服务就是将项目的各个模块拆分为可独立运行、部署、测试的架构设计风格。
- Spring公司将其他公司中微服务架构常用的组件整合起来,并使用SpringBoot简化其开发、配置。称为Spring Cloud
- Spring Cloud 与Dubbo都是实现微服务有效的工具。Dubbo性能更好,而Spring Cloud功能更全面。
服务治理
Consul
基本介绍
- Consul是由HashiCorp基于Go语言开发的,支持多数据中心,分布式高可用的服务发布和注册服务软件。用于实现分布式系统的服务发现与配置。
- 使用起来也较为简单。具有天然可移植性(支持Linux、windows和Mac OSX);安装包仅包含一个可执行文件,方便部署。
- 官网地址: https://www.consul.io
- 去官网下载
运行Consul服务
前往consul.exe目录下打开shell(我这里windows我用的git bash)启动consul
./consul agent -dev
打开consul控制台查看
在浏览器输入,回车
localhost:8500
创建之前的consumer和provider项目(可以复制下类和配置)
删除两个项目之前的eureka配置和依赖、相关代码
- 修改pom依赖
<dependencies>
<!--spring boot web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- consul-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!-- actuator健康检查-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
- 修改provider配置文件
server:
port: 8000
spring:
cloud:
consul:
discovery:
service-name: ${spring.application.name} #要注册上的服务名
prefer-ip-address: true # 使用ip地址
host: localhost #服务主机
port: 8500 #服务端口
- 启动项目,可以看到我们的服务已经注册上去了
- consumer也一样的改掉依赖、配置启动后,可以在控制台看到三个服务全部上线了
- consumer的代码(其实就是之前eureka的代码一模一样,都是支持springcloud所以不需要改)
package com.fpa.consumer.controller;
import com.fpa.consumer.bean.Goods;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.net.URI;
import java.util.List;
@RestController
@RequestMapping("/goods")
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("/findGoodsById/{id}")
public Goods findOne(@PathVariable("id") int id){
/**
* 1 配置 RestTemplate 的bean
* 2 在需要的地方注入 restTemplate
* 3 在接口内使用restTemplate进行远程调用
* restTemplate有提供一些方法,例如get post put delete等常用的,自己点开看
*/
// String url = "http://127.0.0.1:8000/goods/1";
//serviceId就是那个服务的应用名,不区分大小写
List<ServiceInstance> instanceList = discoveryClient.getInstances("provider-app");
if (instanceList != null && instanceList.size() > 0){
ServiceInstance serviceInstance = instanceList.get(0);
// String host = serviceInstance.getHost();
// int port = serviceInstance.getPort();
URI uri = serviceInstance.getUri();
String url = uri + "/goods/1";
Goods goods = this.restTemplate.getForObject(url,Goods.class);
return goods;
}
return null;
}
}
- 测试接口正常
总结
consul也是可以搭建集群的,只不过课程中没有演示,搭建集群的过程是采用的单独启动加join模式,可以自行百度使用,很简单的
比eureka好用多了
本文来自博客园,作者:HumorChen99,转载请注明原文链接:https://www.cnblogs.com/HumorChen/p/18039570