文档章节

spring cloud

榴莲黑芝麻糊
 榴莲黑芝麻糊
发布于 08/18 00:59
字数 5031
阅读 32
收藏 0

一、从面试题入手

    1.1、什么事微服务

        

    1.2、微服务之间如何独立通讯的

    1.3、springCloud和Dubbo有哪些区别

        1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API

    1.4、springBoot和cloud,他们的理解

    1.5、什么事服务熔断?什么事服务降级?

    1.6、微服务的优缺点?遇到的坑

    1.7、微服务技术栈

    1.8、eureka和zookeeper都可以提供服务注册与发现,说说两个的区别

二、微服务概述

    微服务、微服务架构、springcloud十三个东西

    2.1、是什么

        通常而言,微服务架构是一种架构模式或者一种架构风格,他提倡将单一应用程序拆分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于http的restful api)。每个服务都围绕着这具体业务进行构建,并且能够被独立服务的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应当根据业务上下文、选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储

        从技术维度理解:微服务华的核芯就是传统的一站式应用,根据业务拆分成一个个服务,彻底去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事情,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,拥有自己地里的数据库

        这里就可以理解,为什么马丁·富乐说对微服务没有一个统一的划分规则:拆分维度:根据业务流程拆分?按技术拆?按领域模型拆?

    2.2、微服务与微服务架构

        微服务:

            强调的是服务的大小,他关注的是某一个点,是具体解决某一个问题、提供落地对应服务的一个应用,狭义的看,可以看做Eclipse里面一个个微服务工程、或者Module。

            他具体是使用boot开发的一个小模块,专业的事情交给专业的模块来做,一个模块就做一件事情

            微服务架构:

    2.3、微服务优缺点

        优点:每个服务足够内聚,足够小,代码容易理解。这样能聚焦一个指定的业务功能或者业务需求

            开发简单、效率提高,一个服务可能就是专一的只做一件事。

            微服务能够被小团队开发,这个小团队是2到5人的开发人员组成

            微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或者部署阶段都是独立的。

            微服务可以使用不同的语言开发

            易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如JenKin、Hudson、bamboo。

            微服务易于被开发人员理解,修改和维护,这样小团队能够更能关注自己的工作成果。无需通过合作才能体系体现价值

            微服务允许你利用融合最新技术

            **微服务只是业务逻辑的代码,不会和HTML、CSS或者其他页面组件混合

            **每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一的数据库

            可以灵活搭配,连接公共库+连接公共库

        两种开发模式:前后端分离、全栈工程师

            前后端分离:只需要管理后端,给前段H5工程师就按照约定:rest地址+输入参数格式和报文约定+输出参数

                例如:$.post(rest,jsonParamter,callback)

            全栈工程师:H5+JAVAEE

    缺点:

        开发人员要处理分布式系统的复杂性

        服务与服务之间的调用、通信成本增加

        多服务运维难度,随着服务的增加,运维压力也在增大

        系统部署依赖

        数据一致性

        系统集成测试

        性能监控

    2.4、微服务技术栈(多种技术的集合体)  

微服务条目 落地技术 备注
服务开发 springboot、spring、springMVC  
服务配置与管理 Netfix公司的Archaius、阿里的Diamon等  
服务注册与发现 Eureka、Consul、Zookeeper  
服务调用 Rest、RPC、gRPC  
服务熔断器 Hystrix、Envoy  
负载均衡 Ribbon、Nginx等  
服务接口调用(客户端调用服务的简化工具) Feign等  
消息队列 Kafka、RabbitMQ、ActiveMQ等  
服务配置中心管理 SpringCloudConfig、Chef等  
服务路由(API网关) Zuul等  
服务监控 Zabbix、Nagios、Metrics、Spectator等  
全链路追踪 Zipkin、Brave、Dapper等
服务部署 Docker、OpenStack、Kubernetes等
数据流操作开发包 springCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息)
事件消息总线 spring cloud bus
。。。。  

    2.5、为什么选择cloud作为微服务架构

        选型依据:

            整体解决方案和框架成熟度

            社区热度

            可维护性

            学习曲线

        当前各大IT公司用的微服务架构有哪些?

            阿里Dubbo、HSF

            京东JSF

            新浪微博Motan

            当当网Dubbox

            。。。。

        各个微服务框架对比

         

功能点\服务框架 备选方案
  Netflix/SpringCloud Google  gRPC FaceBook  Thrift Dubbo/Dubbox Motan
功能定位 完整的微服务框架 RPC框架 RPC框架 服务框架 RPC框架,但整合了ZK或Consul,实现集群环境的基本的服务注册/发现
支持Rest 是。Ribbon支持多种可插拔的序列化选择 f f f f
支持RPC f     是(Hession2)
支持多语言 是(REST形式)
服务注册/发现 是(Eureka)Eureka服务注册表,Karyon服务端框架支持服务自注册和健康检查 是(Zookeeper/consul)
负载均衡

是(服务端zuul+客户端Ribbon)Zuul-服务

动态路由 

云端负载均衡

Eureka(针对中间层服务器)

是(客户端) 是(客户端)
配置服务 Netflix Archaius    SpringCloud Config   Server集中配置字 是(zookeeper提供) f f f
服务调用链监控 是(Zuul)zuul提供边缘服务,API网关 f f f f
高可用/容错 是(服务端Hystrix)+客户端Ribbon 是(客户端) f f 是(客户端)
典型应用案例 Netflix Sina Google FaceBook  
社区活跃程度 一般 一般 不维护
学习难度 中等
文档丰富度 一般 一般 一般
其他 springcloudBUS为我们的应用程序带来了更多管理端点 支持降级 Netflix内部在开发集成gRPC IDL定义 实践公司较多

三、入门概述

    是什么

        官网说明

            spring cloud,基于spring boot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器组件。出了基于Netflix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件。

            springCloud利用Spring Boot的开发便利性巧妙的简化了分布式系统基础设施的开发,Spring Cloud为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现与注册、断路器、路由、微代理、事件总栈、全局锁、决策竞选、分布式会话等等。他们都可以用springboot的开发风格做到一键启动和部署

            spring boot没有重复制造轮子,它只是将目前各家公司开发的比较成熟的、经得起考验的服务框架组合起来,通过spring boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署、易维护的分布式系统开发工具包

        spring  cloud=分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,俗称:微服务全家桶       

        spring cloud和spring boot是什么关系?

            springBoot专注于快速方便的开发单个个体微服务。

            spring cloud是关注全局的微服务协调整理治理框架,他讲boot开发的一个个单体微服务整合并管理起来,为各个微服 务之间提供了配置管理、服务发现与注册、断路器、路由、微代理、事件总栈、全局锁、决策竞选、分布式会话等等集成服务

            boot可以离开cloud独立使用并开发项目,但是cloud离不开boot,属于依赖关系

            boot专注于快速、方便的开发单个微服务个体,cloud关注全局的服务治理框架

        Dubbo是怎么到spring cloud的? 哪些优缺点让你去技术选型?

            目前成熟的互联网架构(分布式+服务治理Dubbo)

            cloud与Dubbo进行对比

                活跃度

                对比结果

                最大的区别:cloud抛弃了Dubbo的RPC通信,采用的是基于HTTP的REST FUL方式

                严格来说,各有优劣。一定程度上,后者牺牲了服务调度的性能,但也避免了原生RPC带来的问题。而且REST比RPC更加灵活,服务提供方和调用方的依赖只依靠一纸锲约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,闲的更加合适。

                

            总结cloud与Dubbo

    能干嘛

 

    去哪下

        官网:

        中文网:https://springcloud.cc/

        中文网:https://springcloud.cc/spring-cloud-dalston.html

        springcloud中国社区

    怎么玩

        目前为止,有21中技术。。。。

    spring cloud国内使用情况

四、rest微服务构建案例工程模块

    总体介绍

        springmvc+mybatis+mysql,以Dept部门模块做一个微服务通用案例。消费者(client)通过rest调用提供者(server)提供的服务

        Maven的分包分模块架构复习

            一个Project待着多个Module子模块(父工程聚合很多子工程)

            MicroServiceCloud父工程(Project)下初次带着三个子模块(Module)

                microservicecloud-api    封装的整体entity/接口/公共配置等

                microservicecloud-provider-dept-8001     每个微服务都是个独立的工程,8001就是他的端口,为了区分。微服务落地的提供者

                 microservicecloud-customer-dept-80        微服务调用的客户端使用(消费者)

        实践

    本次cloud版本

    构建步骤      

        microservicecloud整体父工程Project

            新建父工程microservicecloud,切记是Packaging是pom模式

            主要是定义POM文件,将后续各个子模块公用的jar包等统一提出来,类似一个抽象类

            POM                

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.wby.springcloud</groupId>
  <artifactId>microservicecloud</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
   
  <properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<junit.version>4.12</junit.version>
		<log4j.version>1.2.17</log4j.version>
		<lombok.version>1.16.18</lombok.version>
	</properties>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Dalston.SR1</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-dependencies</artifactId>
				<version>1.5.9.RELEASE</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
			<dependency>
				<groupId>mysql</groupId>
				<artifactId>mysql-connector-java</artifactId>
				<version>5.0.4</version>
			</dependency>
			<dependency>
				<groupId>com.alibaba</groupId>
				<artifactId>druid</artifactId>
				<version>1.0.31</version>
			</dependency>
			<dependency>
				<groupId>org.mybatis.spring.boot</groupId>
				<artifactId>mybatis-spring-boot-starter</artifactId>
				<version>1.3.0</version>
			</dependency>
			<dependency>
				<groupId>ch.qos.logback</groupId>
				<artifactId>logback-core</artifactId>
				<version>1.2.3</version>
			</dependency>
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>${junit.version}</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>log4j</groupId>
				<artifactId>log4j</artifactId>
				<version>${log4j.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>

</project>
  
</project>

        microservicecloud-api公共子模块Module

            直接创建Maven Project会报错,创建Maven Project的时候要新建一个Working Set,然后再创建Maven Module就可以正常运行

            maven中:约定》配置》编码

                约定:

                配置:就是pom文件

<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
</dependency>
作用:我们每次创建实体类都少不了:getset方法、空参有参构造方法、toString、重写hashcode等等,如果要新增或者删除一个属性,那么这些操作都要重新再来一次。
解决方式:使用lombok

        microservicecloud-provider-dept-8001部门微服务提供者Module

 

 

 

 

        microservicecloud-consumer-dept-80部门为服务消费者Module

五、Eureka服务注册与发现

Eureka的基本架构

 

构建步骤

 

这里就牵扯到一个问题:假如需要在cloud中引入一种新技术,大致分为两步:

    1.引入maven坐标

        1.1比如引入eureka,那么就需要引入他的maven坐标

<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

    2.在主启动类上,标注启动该新组建技术的想关注注解标签

    3.java业务逻辑编码

actuator与注册微服务信息完善

    actuator:主管监控与配置

对应的三个问题:

解决方案

第二个问题:修改yml文件

第三个问题:

Eureka的自我保护

导致原因

不建议关闭“自我保护机制”

 

-----

 

/**
	 * 查询微服务
	 * @return
	 */
	@RequestMapping(value = "/dept/discovery", method = RequestMethod.GET)
	public Object discovery()
	{
		List<String> list = client.getServices();
		System.out.println("**********" + list);
		//获取名字是MICROSERVICECLOUD-DEPT
		List<ServiceInstance> srvList = client.getInstances("MICROSERVICECLOUD-DEPT");
		for (ServiceInstance element : srvList) {
			System.out.println(element.getServiceId() + "\t" + element.getHost() + "\t" + element.getPort() + "\t"
					+ element.getUri());
		}
		return this.client;
	}

 

集群配置

修改映射配置(做一下域名映射)

127.0.0.1	eureka7001.com
127.0.0.1	eureka7002.com
127.0.0.1	eureka7003.com

yml配置(注意互相手牵手)

7002的yml配置

server: 
  port: 7002
 
eureka: 
  instance:
    #hostname: localhost #eureka服务端的实例名称
    hostname: eureka7002.com #eureka服务端的实例名称
  client: 
    register-with-eureka: false     #false表示不向注册中心注册自己。
    fetch-registry: false     #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url: 
      #单机 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/       #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址(单机)。
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7003.com:7003/eureka/

7003的yml配置

server: 
  port: 7003
 
eureka: 
  instance:
    #hostname: localhost #eureka服务端的实例名称
    hostname: eureka7003.com #eureka服务端的实例名称
  client: 
    register-with-eureka: false     #false表示不向注册中心注册自己。
    fetch-registry: false     #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url: 
      #单机 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/       #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址(单机)。
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7001.com:7001/eureka/  

provider:8001发布到上面的三台Eureka中

    yml配置

eureka:
  client: #客户端注册进eureka服务列表内
    service-url: 
      #defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

作为服务注册中心,Eureka比Zookeeper好在哪里?

回到最开始的:Netflix在设计Eureka的时候遵守的就是AP原则

CAP

RDBMS(mysql/oracle/sqlserver)===>ACID理念

Nosql(redis/mongdb)===>CAP理念

那么Eureka和zookeeper的区别在哪里?

    1.Eureka遵守AP,zookeeper遵守CP

什么事CAP呢?与传统数据库的ACID相比是什么意思?回顾redis中的:在分布式数据库中CAP原理CAP+BASE

经典CAP图

CAP的3进2

 

作为服务注册中心,Eureka比zookeeper好在哪里?

六、Ribbon负载均衡

概述

    是什么  

    能干嘛

        LB(负载均衡):集中式LB、进程内LB

        HA:高可用

        集中式LB:偏硬件

        进程内LB:偏软件

    官网资料

Ribbon配置初步

总结

  

 

Ribbon负载均衡

    架构说明

 

修改8002/8003各自的yml,连接自己的数据库

先启动三个Eureka服务

再启动三个dept微服务

 

    结果:已经分别连上了各自的数据库,并且访问成功

启动comsumer,第一次访问

刷新,再次访问

再次刷新访问

 

 

 

Ribbon核心组件IRule

    出厂自带7种算法

Ribbon自定义

修改consumer-80

主启动类添加@RibbonClient

注意配置细节

 

@ComponentScan注解在哪里?

主启动类中的@SpringBootApplication包含了

所以我们自定义的类

不能放在主启动类所在的包

 

步骤

    新建pakage com.wby.myrule

    新建自定义Robbin规则类

    

修改主启动类

测试:localhost/cunsumer/dept/list

自定义规则深度解析

解析源码:

调用

 

 

 

七、Feign负载均衡

概述

使用步骤

修改pom,添加对feign的支持(其余的和consumer-dept-80相同)

<!-- feign的pom依赖 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-feign</artifactId>
		</dependency>

修改api工程

    pom文件:

<!-- feign的pom依赖 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-feign</artifactId>
		</dependency>

    新建接口并新增注解 

@FeignClient(value="microservicecloud-dept")
public interface DeptClientService {
	@RequestMapping(value="/dept/add",method=RequestMethod.POST)
	public boolean add(Dept dept);
	
	@RequestMapping(value="/dept/get/{id}",method=RequestMethod.GET)
	public Dept get(Long id);
	
	@RequestMapping(value="/dept/list",method=RequestMethod.GET)
	public List<Dept> list();
}

在feign工程修改controller,添加上一步新建的DeptClientService接口

@RestController
public class DeptController_custormer {
	/**
	 * 使用feign方式访问
	 */
	@Autowired
	private DeptClientService deptClientService;
	
	@RequestMapping(value = "/consumer/dept/get/{id}")
	public Dept get(@PathVariable("id") Long id)
	{
		return this.deptClientService.get(id);
	}

	@RequestMapping(value = "/consumer/dept/list")
	public List<Dept> list()
	{
		return this.deptClientService.list();
	}

	@RequestMapping(value = "/consumer/dept/add")
	public Object add(Dept dept)
	{
		return this.deptClientService.add(dept);
	}
	
	
	
	
	/**
	 * 使用方式:
	 * 	使用restTemplate访问restful接口非常的简单粗暴无脑。 (url, requestMap,ResponseBean.class)这三个参数分别代表 REST请求地址、
	 * 	请求参数、HTTP响应转换被转换成的对象类型。
	 * restTemplate提供了多种便捷访问远程Http服务的方法(类似HttpClient),是一种简单便捷访问restful服务模板类,是spring
	 * 提供的用于访问rest服务的客户端模板工具类
	 * 
	 */
	/*@Autowired
	private RestTemplate restTemplate;
	
	//private static final String REST_URL_PREFIX = "http://localhost:8001";
		private static final String REST_URL_PREFIX = "http://MICROSERVICECLOUD-DEPT";
	
	@RequestMapping(value = "/consumer/dept/add")
	public boolean add(Dept dept)
	{
		return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);
	}

	@RequestMapping(value = "/consumer/dept/get/{id}")
	public Dept get(@PathVariable("id") Long id)
	{
		return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/" + id, Dept.class);
	}

	@SuppressWarnings("unchecked")
	@RequestMapping(value = "/consumer/dept/list")
	public List<Dept> list()
	{
		return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);
	}

	// 测试@EnableDiscoveryClient,消费端可以调用服务发现
	@RequestMapping(value = "/consumer/dept/discovery")
	public Object discovery()
	{
		return restTemplate.getForObject(REST_URL_PREFIX + "/dept/discovery", Object.class);
	}*/
}

修改feign工程主启动类

@SpringBootApplication
@EnableEurekaClient

@EnableFeignClients(basePackages={"com.wby.springcloud"})
@ComponentScan("com.wby.springcloud")
public class DeptConsumer80_Feign_App
{
	public static void main(String[] args)
	{
		SpringApplication.run(DeptConsumer80_Feign_App.class, args);
	}
}

这时候@FeignClient和@EnableFeignClients就可以关联起来了

测试

小结

 

八、Hystrix断路器

概述

分布式系统面临的问题

是什么?

能干嘛?

 

服务熔断

是什么

参考provider-dept-8001

pom(在provider-dept-8001的pom文件基础上新增)

<!-- hystrix和 hystrix-dashboard相关 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-hystrix</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
		</dependency>

yml

把instance-id修改为熔断器的名称
 instance:
    instance-id: microservicecloud-dept8001-hystrix   #自定义hystrix相关的服务配置信息
    prefer-ip-address: true     #访问路径可以显示IP地址

修改deptController

    @HystrixCommand报异常后如何处理

    一旦调用服务方法失败并抛出了错误信息后,会自动调用@HystrixCommand标注好的fallbackMethod调用类中指定的方法。

代码内容

@RestController//等价于controller和ResponseBody
public class DeptController
{
	@Autowired
	private DeptService service = null;
	@RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
	//一旦调用服务方法失败并抛出了错误信息后,会自动调用@HystrixCommand标注好的fallbackMethod调用类中的指定方法
	@HystrixCommand(fallbackMethod = "processHystrix_Get")
	public Dept get(@PathVariable("id") Long id)
	{
		Dept dept = this.service.get(id);
		
		if (null == dept) {
			throw new RuntimeException("该ID:" + id + "没有没有对应的信息");
		}
		
		return dept;
	}

	public Dept processHystrix_Get(@PathVariable("id") Long id)
	{
		return new Dept().setDeptno(id).setDname("该ID:" + id + "没有没有对应的信息,null--@HystrixCommand")
				.setDb_source("no this database in MySQL");
	}

}

修改主启动类,并添加新注解

@SpringBootApplication
@EnableEurekaClient //本服务启动后会自动注册进eureka服务中
@EnableDiscoveryClient //服务发现
@EnableCircuitBreaker//对Hystrix熔断机制的支持
public class DeptProvider8001_App
{
	public static void main(String[] args)
	{
		SpringApplication.run(DeptProvider8001_App.class, args);
	}
}

测试

服务降级

是什么

服务降级处理是在客户端实现完成的,与服务端没有关系

修改microservicecloud-api工程,根据已经有的DeptClientService接口新建一个实现了FallBackFactory接口的类DeptClientServiceFallBackFactory

修改microservicecloud-api工程,DeptClientService接口

microservicecloud-api工程

microservicecloud-consumer-dept-feign工程修改yml

测试

 

 

 

 

 

服务监控HystrixDashboard

 

 

 

 

 

 

 

 

 

 

九、zuul路由网关

十、springCloud config分布式配置中心

© 著作权归作者所有

榴莲黑芝麻糊

榴莲黑芝麻糊

粉丝 3
博文 162
码字总数 376384
作品 0
杭州
私信 提问
Spring Cloud Greenwich.RC1 发布

Spring Cloud Greenwich 首个 RC 版发布了,这个里程碑版本与 Spring Boot 2.1.1.RELEASE 兼容,各个项目都进行了更新,以实现与 Java 11 的兼容性。可点此查看在该版本中,分配给这个版本的...

局长
2018/12/17
1K
1
Spring Cloud Greenwich.M3 版本发布

Spring Cloud Function 的第三个 Milestone 3 已发布,该版本的各个模块现可在 Spring Milestone 存储库中使用。 主要更改 此版本与 Spring Boot 2.1.0.RELEASE 兼容,并已对 Java 11 兼容性...

淡漠悠然
2018/11/22
5.6K
0
Spring Cloud Finchley SR4 正式发布

Spring Cloud Finchley 的 Service Release 4 (SR4) 版本已发布,本次更新主要是对其包含的一些模块进行了升级,查看发布说明以了解更多信息,可从 Maven 中央仓库获取源码。Spring Cloud Fi...

xplanet
06/15
2.3K
1
Spring Cloud Edgware.SR5 发布,大量 bug 修复

Spring Cloud Edgware SR5(Service Release 5)已发布,可在 Maven Central 下载该版本。 主要更新 Spring Cloud Commons Bug fixes Spring Cloud Config Documentation and Bug fixes Spr......

淡漠悠然
2018/10/18
2.1K
0
Spring Cloud Finchley 正式发布,兼容 Spring Boot 2.0.x

经过数个前期测试版本,Spring Cloud Finchley 终于迎来了正式版本: 下载地址 发行说明 显著变化: 与 Spring Boot 2.0.x 兼容 不支持 Spring Boot 1.5.x 最低要求 Java 8 新增 Spring Clo...

淡漠悠然
2018/06/20
13.9K
22

没有更多内容

加载失败,请刷新页面

加载更多

CRM、DMP、CDP都是什么?有什么区别?

Markter对CRM系统(Customer Relationship Management System,客户关系管理系统),营销自动化等概念都已经比较熟悉,也许DMP(Data Management Platform,数据管理平台)也多多少少有些了解。...

怡海软件-CRM
9分钟前
3
0
中台是什么,到底要解决什么问题?

故事的开始 这个最早由阿里在2015年提出的“大中台,小前台”战略中延伸出来的概念,最近在国内大热。阿里、腾讯、百度、京东、美团、滴滴等一众互联网巨头,从去年到今年,接连开始组织架构...

喵二狸
20分钟前
2
0
Linux Centos 7 - MySQL 5.7离线安装

内部网络通过离线包的方式进行安装。 一、下载 下载地址:https://dev.mysql.com/downloads/mysql/ 进入页面后,点击右侧链接。 下载对应版本。 通过xftp6等工具上传到服务器上。 二、安装和...

华山猛男
21分钟前
2
0
EventBus 3 全解

EventBus 3 全解 [TOC] 使用 一个基于观察者模式的事件发布/订阅框架. 用于模块间通信和解耦, 使用方便,性能高. 基本使用 1. gradle导入依赖库 implementation 'org.greenrobot:eventbus:3....

马湖村第九后羿
23分钟前
3
0
HTTP 协议

什么是HTTP协议? HTTP是hypertext transport protocol的缩写,即超文本传输协议。 是用于万维网服务器与本地浏览器之间传输超文本的传送协议。可以使浏览器更加高效,使网络传输减少。能够保...

彩色泡泡糖
33分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部