SpringCloud

一、微服务说明

1、微服务
单体项目进行功能强耦合的拆分之后(纵向拆分),形成独立运行的各个系统就叫做微服务。

2、微服务框架
管理拆分之后的大量微服务集群节点的框架技术

3、常见框架springcloud & dubbo
共同点:都是轻量级的微服务框架
dubbo支持使用不同的微服务治理组件eureka、redis和zookeeper(rpc协议)(2017之前几年不更新,微服务框架组件没有springcloud多)
springcloud的微服务只能使用http协议,dubbo支持rpc协议(dubbo性能高一些)

4、CAP理论
CONSISTENCY一致性 AVALIBILITY可用性 PARTITION TOLERENCE分区容忍度(高低之分)
CAP理论是分布式基础理论.CAP不能同时存在
CA:没有分区,网络通畅,数据通畅,一致性和可用性都可以实现
CP:分区出现时,要求数据一致性,可用性降低
AP:分区出现时,要求可用性,导致一致性降低

5、eureka和zookeeper选哪个
eureka:http协议,传输速度没有rpc快,系统如果使用eureka,技术选型偏向于AP理论(不要求数据一致性特别高)
zookeeper:rpc协议,系统如果使用zookeeper,要求偏向于CP理论(数据一致性强)

二、springcloud使用

一、介绍
eureka:微服务框架的核心,微服务治理组件,管理所有微服务的信息(节点,服务名称,端口,运行地址) ;
ribbon:微服务中实现服务调用服务的客户端组件;
zuul:网关组件;
config:配置中心;
feign:声明式的调用客户端(和ribbon是样的,注解+代理实现的服务调用服务) ;
hystrix:熔断逻辑(解决服务间调用的错误组件,降级逻辑)。

二、搭建eureka注册中心
1、pom文件中加入

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>
#引入cloud依赖
<dependencyManagement>
  <dependencies>
    <dependency>
     	 <groupId>org.springframework.cloud</groupId>
       	 <artifactId>spring-cloud-dependencies</artifactId>
     	 <version>Edgware.RELEASE</version>
     	 <type>pom</type>
     	 <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
#引入注册中心需要的依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

2、配置application.properties
server.port=8761
eureka.instance.hostname=localhost
eureka.client.registerWithEureka=true
eureka.client.fetchRegistry=true
eureka.client.serviceUrl.defaultZone=http://localhost:8762/eureka
eureka.server.enable-self-preservation=false
eureka.instance.preferIpAddress=true

3、配置启动类

@SpringBootApplication
@EnableEurekaServert
public class StarterEurekaServert01 {
    public static void main(String[] args) {
        SpringApplication.run(StarterEurekaServert01.class, args);
    }
}

4、访问内嵌管理页面 http://localhost:8761/ 即可看到节点信息

三、注册中心高可用
复制上面那个工程,修改配置文件、启动类名称即可

#8761的注册中心配置文件
server.port=8761
spring.application.name=server
eureka.instance.hostname=localhost
eureka.client.registerWithEureka=true
eureka.client.fetchRegistry=true
eureka.client.serviceUrl.defaultZone=http://localhost:8762/eureka
eureka.server.enable-self-preservation=false
eureka.instance.preferIpAddress=true

#8762的注册中心配置文件(工程拷贝8762修改配置文件,启动类名称)
server.port=8762
spring.application.name=server
eureka.instance.hostname=localhost
eureka.client.registerWithEureka=true
eureka.client.fetchRegistry=true
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka
eureka.server.enable-self-preservation=false
eureka.instance.preferIpAddress=true

四、创建服务端
1、pom文件
就是依赖的artifactId那里改一下:spring-cloud-starter-eureka

2、配置application.properties
server.port=9001
spring.application.name=helloservice
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka

3、配置启动类

@SpringBootApplication
@EnableEurekaClient
public class StarterEurekaClient01 {
    public static void main(String[] args) {
        SpringApplication.run(StarterEurekaClient01.class, args);
    }
}

五、创建ribbon客户端
1、pom文件

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>
    <dependencies>
   		 <dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-starter-test</artifactId>
				<scope>test</scope>
		</dependency>
		<!--Eureka相关依赖 -->
		<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<!--Ribbon相关依赖 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-ribbon</artifactId>
		</dependency>
    </dependencies>
    <dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<!--注意这个位置,必须是springboot支持的版本。否则会报出依赖会有错误,但是编译没有问题 运行出 java.net.UnknownHostException: 的错 -->
				<version>Edgware.RELEASE</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

2、application.properties文件
server.port=9004
spring.application.name=service-ribbon
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka,http://localhost:8762/eureka

3、启动类

@SpringBootApplication
@EnableEurekaClient
public class StarterRibbon {
	public static void main(String[] args) {
		SpringApplication.run(StarterRibbon.class, args);
	}
	//restTemplate支持http协议,不能支持服务的调用
	//引入ribbon的拦截注解,默认拦截的负载均衡逻辑是轮询
	@Bean
	@LoadBalanced
	public RestTemplate initRestTemplate(){
		return new RestTemplate();
	}
	//自定义负载均衡规则
	@Bean
	public IRule initRandomRule(){
		return new RandomRule();
	}
}

4、使用的地方

@Service
public class HelloService {
	//在ribbon的访问过程中,使用代码restTemplate
	//访问helloservice的服务
	@Autowired
	private RestTemplate client;
	public String sayHi(String name) {
		//使用上面注入的restTemplate发起服务调用
		//默认是轮询的情况
		//第一个参数位置是网址,第二个返回的参数
		String msg = client.getForObject("http://helloservice/hi?name="+name,String.class);
		return msg;
	}
}

六、zuul网关组件
springcloud提供了唯一对外访问的入口组件–zuul网关.可以实现访问url地址的路由/过滤等功能。
1、pom文件

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
    </parent>
    <properties>
   		 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

  <dependencies>
  	<dependency>
  		<groupId>org.springframework.cloud</groupId>
  		<artifactId>spring-cloud-starter-zuul</artifactId>
  	</dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
	</dependency>
  </dependencies>
  <dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Edgware.RELEASE</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
</dependencyManagement>

2、application.properties文件

server.port=8103
spring.application.name=zuul-service
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka

<-- 下面是 -->
zuul.routes.api-a.path=/api-a/**
zuul.routes.api-a.serviceId=service-ribbon
zuul.routes.api-b.path=/api-b/**
zuul.routes.api-b.serviceId=helloservice
zuul.routes.product.path=/zuul-product/**
zuul.routes.product.serviceId=productservice
zuul.routes.pic.path=/zuul-pic/**
zuul.routes.pic.serviceId=imgservice

location /cart {
			proxy_pass http://127.0.0.1:8103/zuul-cart/cart/manage;
			add_header 'Access-Control-Allow-Credentials' 'true';
			add_header 'Access-Control-Allow-Origin' '*'; 
		}

3、配置启动类

@SpringBootApplication
@EnableZuulProxy
public class StarterZuulGateWay {
    public static void main(String[] args) {
        SpringApplication.run(StarterZuulGateWay.class, args);
    }
}

4、流转逻辑
①页面输入 http://localhost:8103/api-b/hello?name=liulaoshi
②先因为输入的是8103,所以到了zuul网关这里,配置文件中能找到api-b路径。
③将前面去掉,重新匹配的结果是http://helloservice/hello?name=liulaoshi
④在注册中心里有helloservice的服务,所以转到那个服务处http://localhost:9004/hello?name=liulaoshi

七、Nginx和zuul实现高可用
1、首先有两个zuul网关服务,端口分别为(8104和8105)
2、然后nginx中指向一下

upstream zuulcluster{
	server 127.0.0.1:8103;
	server 127.0.0.1:8104;
}
server {
	listen 80;
	server_name www.ssm.com;
	location /zuul{
		proxy_pass http://zuulcluster;
	}
}

3、流转过程
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud是一个用于构建分布式系统的开发工具集合。它提供了一些常用的组件和框架,包括服务注册和发现、负载均衡、断路器、分布式配置等等。在使用Spring Cloud时,有一些常见的错误和注意事项需要注意。 首先,关于Spring Boot和Spring Cloud版本对应错误。在使用Spring Cloud时,需要确保Spring Boot和Spring Cloud的版本兼容。不同版本之间可能存在依赖冲突或不兼容的情况,因此需要根据官方文档或者相关文档来选择合适的版本。 另外,Spring Cloud Config是一个用于集中管理和动态获取配置的工具。它支持从Git、SVN或本地文件系统中获取配置文件,并提供了服务器和客户端支持。你可以通过官方使用说明文档了解更多关于Spring Cloud Config的详细信息。 此外,关于选择使用Nacos还是Eureka作为服务注册和发现组件的问题。Nacos是一个功能更强大的服务注册和发现组件,它整合了Spring Cloud Eureka、Spring Cloud Config和Spring Cloud Bus的功能。使用Nacos可以实现配置的中心动态刷新,而不需要为配置中心新增集群或使用消息队列。另一方面,Eureka是Spring Cloud原生全家桶的一部分,相对来说更加稳定一些。选择使用哪个组件需要根据具体的需求和项目特点来决定。 综上所述,Spring Cloud是一个用于构建分布式系统的开发工具集合,它提供了一些常用的组件和框架。在使用Spring Cloud时,需要注意Spring Boot和Spring Cloud版本的兼容性,并可以使用Spring Cloud Config来动态获取配置。同时,可以选择使用Nacos或Eureka作为服务注册和发现组件,具体选择需要根据项目需求来决定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值