设为首页 加入收藏

TOP

Spring Cloud和Dubbo整合开发笔记(1)(一)
2019-09-17 16:58:49 】 浏览:53
Tags:Spring Cloud Dubbo 整合 开发 笔记

一、需求背景:

  1. 公司内部老项目微服务技术栈使用Dubbo, 新项目技术栈使用主流的Spring Cloud相关组件开发,新旧项目涉及交互调用,无法直接通信数据传递。
  2. 老项目基于Dubbo,重构代码升级使用Spring Cloud,改造升级要求成本最低,不影响现有系统运行。

二、Dubbo和Spring Cloud 的比较

  首先Dubbo是一个分布式服务框架,以及SOA治理方案。它的功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等,它是著名的阿里服务治理的核心框架。Spring Cloud更加关心为开发人员提供开箱即用的一系列常见的分布式工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线),它是基于轻量级框架Spring家族,维护版本速度相对较快。

想深入了解的朋友,可以参考这篇文章专门分析了两者的区别:听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构  

改造思路:Spring Cloud和Dubbo用于协调服务组件需要进行统一,使得Dubbo服务和Spring Cloud 服务能够相互感知。其次统一微服务之间的通信协议,Spring Cloud使用Http协议,Dubbo支持Dubbo,Hessian,rmi,http,webservice,thrift,redis,rest,memcached协议;数据传输载体或者说格式在网络中也是统一的,和调用的服务架构无关。改造前需要明确的是两种架构Spring Cloud和Dubbo在项目中的主次,不然容易造成开发人员使用API困惑,代码接口混乱,其次不要急于期望短期将架构统一,改造完整,特别是Spring Cloud带来了项目开发更多的环节,更多的组件(意味着有更多的坑)。

改造方案:

  • 传统方案:保留完整的Dubbo老系统,Dubbo服务不需要向SpringCloud组件注册服务,通过Ribbon/Fegin调用Dubbo服务暴露的Restful Api.缺点也明显,需要人工维护Dubbo服务和Spring Cloud服务的关系,当Dubbo服务较多时,不同的环境配置太多。
  • 传统方案:借助SideCar支持多语言的特性,连接Dubbo和Spring Cloud底层使用Sidecar交互,同时Dubbo也可以将信息传播到Eureka上面。缺点明显,需要每个Dubbo服务节点额外配置Sidecar服务节点,同时增加了链路的长度。

我的方案:Spring Cloud和Dubbo的服务中心选择阿里的Nacos,它是一个动态服务发现、配置管理和服务管理平台,为什么不选择使用Zookeeper,因为zookeeper是个CP系统,强一致性。如果其中master挂掉,此时zookeeper集群会进行重新选举,不能提供服务列表信息的服务,其次zookeeper通过tcp不能准确判断服务此时是否可用,数据库挂了,数据库连接池满了等也能提供TCP信息。通信协议我选择Http协议,Dubbo2.6之后支持http协议,数据格式使用Json,前端无需根据服务区分数据格式解析。

Nacos支持部署的模式有单机,集群,多集群模式,Nacos 0.8之后支持数据库持久化,可以方便看见服务信息的前后变化。单机模式很简单启动,下载最新版Nacos:https://github.com/alibaba/nacos/releases ,解压直接运行bin/startup.sh或者startup.cmd即可。

Nacos不仅提供服务发现和服务健康监测,它也提供控制台可视化页面进行动态配置服务,动态 DNS 服务,服务及其元数据管理等功能,Nacos0.8版本支持简单登录功能,默认用户名/密码为 nacos/nacos。:

相比Eureka提供的单一的看板页面,提供的管理功能可以说没得比,具体使用手册参考官方:https://nacos.io/zh-cn/docs/console-guide.html,这里不再赘述。

首先开发基于Spring Cloud+Nacos架构的微服务,nacos-discovery-provider为服务提供者,nacos-discovery-consumer为服务消费方, 

nacos-discovery-provider的pom.xml加入相关依赖:

 1 <dependencies>
 2         <dependency>
 3             <groupId>org.springframework.cloud</groupId>
 4             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
 5             <version>0.2.1.RELEASE</version>
 6         </dependency>
 7         <dependency>
 8             <groupId>org.springframework.boot</groupId>
 9             <artifactId>spring-boot-starter-web</artifactId>
10             <version>2.0.6.RELEASE</version>
11         </dependency>
12         <dependency>
13             <groupId>org.springframework.boot</groupId>
14             <artifactId>spring-boot-starter-actuator</artifactId>
15             <version>2.0.6.RELEASE</version>
16         </dependency>
17     </dependencies>

 

 

application.properties的配置为:

1 server.port=18082
2 spring.application.name=service-provider
3 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848   
4 management.endpoints.web.exposure.include=*

 

其中spring.cloud.nacos.discovery.server-addr为配置的Nacos地址,management.endpoints.web.exposure.include=*表示对外暴露所有项目信息。

启动类的代码:

 1 package org.springframework.cloud.alibaba.cloud.examples;
 2 
 3 import org.springframework.boot.SpringApplication;
 4 import org.spri
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇微软跨平台ORM框架之EFCore 下一篇面向过程和面向对象的区别,方法..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目