目录
Dubbo有两种使用方式:
1、基于SOA的思想,将一个单体架构拆分为web层和Services层,然后web和services借助Dubbo框架进行数据交互。
2、SpringCloud 整合Dubbo。
这篇博客所要介绍的就是第二种。
首先我们要想,为什么SpringCloud 要整合Dubbo?
在SpringCloud中会有多个微服务,不同的微服务访问一样的数据库,每个微服务都需要进行服务注册和服务发现,这个时候就要用到注册中心Nacos。
在微服务当中,各个服务之间如果要进行通信,要进行调用的话,使用的就是Feign。
那Feign这种协议究竟好不好呢?
Feign其实基于Http协议(应用层),调用的是REST风格的API 来完成数据交互容易成为性能瓶颈。
Dubbo框架的通信协议采用TCP协议(数据传输层)。
看下图:

我们可以看到Http 协议位于七层网络协议的应用层,TCP协议位于数据传输层,可以看到Http协议就是对TCP协议的封装,由于它做了更深层次的封装,所以它的效率可能就会低一些,特别是在高并发场景下性能可能会成为瓶颈。
所以这个时候,有的开发人员就会想了,既然Feign这个协议效率会存在瓶颈,我为什么不把Dubbo拿进来替换Feign呢?
哎,这个就是Dubbo 在SpringCloud 中的意义。
Dubbo框架的通信协议采用RPC协议来进行数据传输的,属于传输层协议,Dubbo默认通过Netty构造TCP长连接的方式进行通信,性能较高,使用SpringCloud整合Dubbo,那就是强强联合。
借助Spring Cloud Alibaba提供了微服务开发的一站式解决方案,我们可以很轻松的完成Dubbo的整合。
在SpringCloud 中加入了 Dubbo,我们的架构整体就会发生了变化,我们的客户端请求网关,网关将请求路由到微服务,微服务呢需要进行注册中心的配置以及配置中心的管理,当然,各个微服务之间进行调用就不再是Feign,而是Dubbo。
介绍完Dubbo在springcloud 中 的作用,接下来我们就进入代码实战。
这里使用的Demo是以前写过的。具体看这个专栏的文章:SpringCloud_一切总会归于平淡的博客-CSDN博客
以前我们是使用Feign进行服务之间的通信,现在我们将其改造为Dubbo。
抽取公共模块其实是比较简单的,我们来看看实现步骤:
1、创建dubbo-api模块

2、抽取公共模块

这里的实体类其实也可以放到另一个模块里然后进行引入,但是我太懒了,直接拉到dubbo-api模块来了,大家根据自己的习惯来吧。
我们接下来去修改user-service实现dubbo-api中的UserService接口。并使用@DubboService注解替换@Service对外暴露dubbo服务。
1、首先我们要先在user-service 中引入依赖。
<!--nacos注册中心的依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--springcloud alibaba dubbo依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>com.jie.demo</groupId>
<artifactId>dubbo-api</artifactId>
<version>1.0</version>
</dependency>
2、编写UserService实现类。

这样我们就向外暴露一个Dubbo服务。
3、编写application.yml 文件
dubbo:
protocol:
name: dubbo
port: 20881
registry:
address: spring-cloud://localhost #使用SpringCloud中的注册中心
scan:
base-packages: com.jie.user.service #dubbo中包扫描
1、首先在order-service 中引入依赖。
<!--nacos注册中心的依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--springcloud alibaba dubbo依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>com.jie.demo</groupId>
<artifactId>dubbo-api</artifactId>
<version>1.0</version>
</dependency>
2、使用@DubboReference引入Dubbo服务,调用远程服务。

3、编写application.yml 文件
#dubbo配置
dubbo:
registry:
address: spring-cloud://localhost #使用cloud的注册中心
consumer:
check: false #dubbo默认有启动检查
retries: 0 #dubbo内置的重试机制
重启提供者和消费者的服务,然后发送一个请求测试。

注意:
实体类一定要实现序列化接口!!!
目录SpringBootStarter是什么?以前传统的做法使用SpringBootStarter之后starter的理念:starter的实现: 创建SpringBootStarter步骤在idea新建一个starter项目、直接执行下一步即可生成项目。 在xml中加入如下配置文件:创建proterties类来保存配置信息创建业务类:创建AutoConfiguration测试如下:SpringBootStarter是什么? SpringBootStarter是在SpringBoot组件中被提出来的一种概念、简化了很多烦琐的配置、通过引入各种SpringBootStarter包可以快速搭建出一
我正在尝试找到一种更好的方法将IRB与我的常规ruby开发集成。目前我很少在我的代码中使用IRB。我只用它来验证语法或尝试一些小的东西。我知道我可以将我自己的代码加载到ruby中作为一个require'mycode'但这通常不符合我的编程风格。有时我要检查的变量超出范围或在循环内。有没有一种简单的方法可以启动我的脚本并在IRB内的某个点卡住?我想我正在寻找一种更简单的方法来调试我的ruby代码而不破坏我的F5(编译)键。也许有经验的ruby开发者可以和我分享一个更精简的开发方法。 最佳答案 安装ruby-debugg
我开始了一个小型网络项目并使用Drupal来构建它。到目前为止,还不错:您可以快速建立一个不错的面向CMS的网站,通过模块添加社交功能,并且您有一个广泛的API可以在一个架构良好的平台中进行自定义。现在问题来了:网站的增长超出了最初的计划,我发现自己正处于认真开始为它编写代码的境地。由于Drupal项目,我对PHP有了新的认识,但我想用Ruby来做。我会感觉更舒服,以后维护起来更容易,我可以在其他Ruby/Rails应用程序中重用它。随着时间的推移,我想我会用Ruby重写Drupal中的现有部分。基于此,问题是:是否有人将两者(成功或失败的故事)结合起来?这是一个相当大的决定,但我在G
📝学技术、更要掌握学习的方法,一起学习,让进步发生👩🏻作者:一只IT攻城狮。💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看,更准确、更专业。💐学习建议:2、然后记住每个技术最关键的特性(通常一句话或者几个字),从主线入手,由浅入深学习。❤️《SpringCloud入门实战系列》解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。项目demo:源码地址👉🏻SpringCloud入门实战系列不迷路👈🏻:SpringCloud入门实战(一)什么是SpringCloud?SpringCloud入门实战
一、Elasticsearch简介实际业务场景中,多端的查询功能都有很大的优化空间。常见的处理方式有:建索引、建物化视图简化查询逻辑、DB层之上建立缓存、分页…然而随着业务数据量的不断增多,总有那么一张表或一个业务,是无法通过常规的处理方式来缩短查询时间的。在查询功能优化上,作为开发人员应该站在公司的角度,本着优化客户体验的目的去寻找解决方案。本人有幸做过Tomcat整合solr,今天一起研究一下当前比较火热的Elasticsearch搜索引擎。Elasticsearch是一个非常强大的搜索引擎。它目前被广泛地使用于各个IT公司。Elasticsearch是由Elastic公司创建。它的代码位
SpringCloudAlibaba全集文章目录:零、手把手教你搭建SpringCloudAlibaba项目一、手把手教你搭建SpringCloudAlibaba之生产者与消费者二、手把手教你搭建SpringCloudAlibaba之Nacos服务注册中心三、手把手教你搭建SpringCloudAlibaba之Nacos服务配置中心四、手把手教你搭建SpringCloudAlibaba之Nacos服务集群配置五、手把手教你搭建SpringCloudAlibaba之Nacos服务持久化配置六、手把手教你搭建SpringCloudAlibaba之Sentinel实现流量实时监控七、手把手教你搭
1.Zookeeper Zookeeper是 ApacheHadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高。 Zookeeper的功能主要是它的树形节点来实现的。当有数据变化的时候或者节点过期的时候,会通过事件触发通知对应的客户端数据变化了,然后客户端再请求zookeeper获取最新数据,采用push-pull来做数据更新。服务注册和消费信息直接存储在zk树形节点上,集群下采用过半机制保证服务节点间一致性。 2.Nacos Nacos是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理。Nacos是Dub
Easy-Es(简称EE)是一款基于ElasticSearch(简称Es)官方提供的RestHighLevelClient打造的ORM开发框架,在RestHighLevelClient的基础上,只做增强不做改变,为简化开发、提高效率而生,您如果有用过Mybatis-Plus(简称MP),那么您基本可以零学习成本直接上手EE,EE是MP的Es平替版,在有些方面甚至比MP更简单,同时也融入了更多Es独有的功能,助力您快速实现各种场景的开发。目录1、ES的优点2、整合过程(1)配置文件(2
之前跟着老师的视频安装了一个es6.4.3,视频里说“6->7类型逐渐被废弃,版本变化较大,与springboot不兼容,建议安装6.4.3与内部一致”,我就很天真的跟着一块装了,结果可想而知……我的springboot版本是2.6.4啊,怎么可能不报错呢??!还是要多看官方文件!整合最重要的就是这张图,版本对了什么都好说es对应的springboot版本SpringDataReleaseTrainSpringDataElasticsearchElasticsearchSpringFrameworkSpringBoot2021.2(Raj)4.4.x7.17.45.3.x2.7.x2021.1
概述最近在想做个cloud项目,gitee上找了个模板项目,后端使用到Nacos、Gateway、Security等技术,需要到Docker容器部署,在此总结一下,若有不足之处,望大佬们可以指出。什么是DockerDocker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得Do