关于项目使用SpringBoot+Dubbo架构遇到的问题

Spring boot 整合dubbo 解决@Reference 注解为null情况 首先检查一下你的spring boot版本是多少? 如果是2.X 不用看了,spring boot 2.x 必定会出现这个问题, 改为 1.5.9 或其他1.x版本,目前生产环境建议使用1.x版本。 <parent> <groupId>org.springframework.boot</groupId> <ar... 阅读详情

前言:

         最近两个月在给新APP做服务端和后台管理系统。应领导的要求,要使用dubbo这款RPC框架将服务端做成微服务。因为之前我就学过dubbo了,不过所有配置都是使用xml来配置的,这样的话服务端项目的xml配置文件就很多了。还有因为公司的旧APP的服务端项目没有使用SpringBoot,所以我觉得使用SpringBoot+Dubbo。因为一开始的时间比较赶,我就直接将以前dubbo的xml配置改成JavaBean配置,也能正常运行,但是有两个问题:

    1、因为我将服务分成五大块,所以要运行五个服务的项目,而且要让SpringBoot项目一直运行就要加上web依赖了,就是每个服务都要加一个server.port,这样子端口是使用非常多的,而且不好运维。

    2、本地启动服务启动得很慢,不知道是不是因为我自己写的代码的原因【在Linux上不慢】。

解决方案: 

    1、解决第一个问题可以使用CountDownLatch锁:

           在服务启动的时候加个锁,第二当服务关闭,也是当Bean被销毁的时候释放锁。启动类要实现CommandLineRunner接口和DisposableBean接口。

           CommandLineRunner接口可以重写run()方法,可以加上自己的业务逻辑。

           DisposableBean接口可以重写destroy()方法,这个方法可以监听Bean销毁,当销毁的时候把锁释放即可。

          直接上代码,不多说:

/**
 * @author howinfun
 * @version 1.0
 * @desc
 * @date 2019/1/23
 * @company XMJBQ
 */
@SpringBootApplication
public class UserServiceApplication implements CommandLineRunner, DisposableBean {

    private static Logger logger = LoggerFactory.getLogger(UserServiceApplication.class);

    @Bean
    public CountDownLatch closeLatch() {
        return new CountDownLatch(1);
    }

    public static void main(String[] args){
        ApplicationContext ctx = new SpringApplicationBuilder().sources(UserServiceApplication.class)
                .web(WebApplicationType.NONE)
                .run(args);
        CountDownLatch closeLatch = ctx.getBean(CountDownLatch.class);
        try {
            // 服务开启的时候加锁
            closeLatch.await();
        }catch (Exception e){
            logger.error("服务启动异常",e);
        }
    }

    @Override
    public void run(String... args) throws Exception {
        logger.info("服务启动中。。。。。");
    }

    @Override
    public void destroy() throws Exception {
        logger.info("服务关闭。。。。");
        // Bean被销毁,即服务关闭时,释放锁
        closeLatch().countDown();
    }
}

 

    2、第二个问题使用incubator-dubbo-spring-boot-project集成框架:

        因为我使用的是SpringBoot,那么肯定很多关于第三方集成的框架,最后我在github上看到incubator-dubbo-spring-boot-project[appche下孵化的,有专业团队长期运维升级],就决定使用这个集成框架了,这就变得想当的便捷了,而且第三方的开源框架肯定要比自己封装得好而且性能也比自己写的好吧。

github地址:https://github.com/apache/incubator-dubbo-spring-boot-project/blob/master/README_CN.md

        下面将简单点说下怎么用,因为我个人感觉有些坑在文档里面找不到的。

       1、首先是引入依赖:这里会出现的坑是zookeeper和curator的版本问题

<!--dubbo相关依赖-->
        <!--注意:ZooKeeper 3.5.x 版本对应Curator 4.X 版本,ZK服务器也是用3.5.X版本-->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.5</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.spring</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>1.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.12</version>
        </dependency>

        <!-- curator4.x对应的Zookeeper为3.5.x,如果用zookeeper3.4.x要去掉依赖 -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.1.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

       2、接下来是application.properties配置文件:服务提供者和服务消费者

             服务提供者:

### 应用名 ####
dubbo.application.name=chain-provider-UserService
dubbo.application.id=chain-provider-UserService
### 服务协议  ####
dubbo.protocol.name=dubbo
dubbo.protocol.id=dubbo
###  端口号指定-1 启动服务时可以为我们分配未使用的端口  #####
dubbo.protocol.port=-1
### 扫面的路径,扫描dubbo的@Service或@Reference  #####
dubbo.scan.base-packages=cn.xmjbq.service.impl
### zookeeper注册中心的地址 ####
dubbo.registry.address=zookeeper://xx.xxx.xxx.xx:2181
### 服务端超时时长 #####
dubbo.provider.timeout=5000
###  是否校验 ####
dubbo.provider.validation=true

         服务消费者:

### 应用名 ####
dubbo.application.name=chain-consumer-web
dubbo.application.id=chain-consumer-web
### 扫面的路径,扫描dubbo的@Service或@Reference  #####
dubbo.scan.base-packages=cn.xmjbq
### zookeeper注册中心的地址 ####
dubbo.registry.address=zookeeper://xx.xxx.xxx.xx:2181
### 服务端超时时长 #####
dubbo.consumer.timeout=5000
###  是否校验 ####
dubbo.consumer.validation=true
### 尝试次数  ####
dubbo.consumer.retries=1
### 是否检查依赖 #####
dubbo.consumer.check=false

    3、关于注解,服务提供的就用@Service,服务消费的用@Reference,里面还能填写什么大家可以点击去看看:

 下面就不再多介绍了,如果有问题可以到github拉项目来看看或者向我提问

github地址:https://github.com/Howinfun/use-dubbo-spring-boot

Dubbo(一):基础知识详解 Dubbo基础知识 一:基本概念 软件架构的发展过程 单体架构-----垂直架构-----SOA架构-----微服务架构 单体架构:(All In One)所有的服务集中在一个应用,扩展时需要横向扩展整个系统(成本较高)。 优点:适用于小型项目,开发部署简单易用 缺点:大型项目不易开发与维护;只能使用一种开发语言;扩展成本高 垂直架构:根据业务进行整个应用的切割,拆成几个互不影响的应用。 举例说明下:一个系统包含用户管理,订单模块,物流模块,垂直架构就是,将系统根据业务分为用户管理和订单模块,用户 阅读详情

相关推荐

springboot整合dubbo(使用dubbo的springboot starter)

1. 项目结构2. maven依赖(服务端)&lt;!-- 第一种starter --&gt; &lt;dependency&gt; &lt;groupId&gt;io.dubbo.springboot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-dubbo&lt;/artifactId&gt; &lt;/depend...

qq_32342369的博客 3026

Dubbo之启动时检查(check属性)。

博文中的内容来源《Dubbo用户指南》这一本书,感激不尽。

孤芳不自赏 3万+

数值计算之 插值法(4)切比雪夫零点插值

数值计算之 插值法(4)切比雪夫零点插值前言插值点选取第一类切比雪夫多项式拉格朗日插值多项式的余项切比雪夫零点插值后记 前言 上篇插值法讨论了多项式插值的解,以及龙格现象。本篇将介绍一种在抽取节点时有效降低龙格现象的方法——切比雪夫零点插值。 插值点选取 插值多项式阶数较高时,在取值空间均匀取点,容易出现龙格现象。 即区间边缘的插值结果与原函数差异很大,而区间中央的插值结果相对较好。这表明,高阶多项式插值对区间中央的节点拟合好,而对两端节点拟合效果差。 自然而然会想到,在两端多采样一些节点,在中间少采样一

qq_41035283的博客 1万+

对dubbo启动时检查check属性的一些个人理解

对于懒加载的bean所注入的服务引用,无论check配置值为true或为false,都不会影响spring容器的加载。check配置为false对于懒加载及非立即加载的bean并没有差异,都可以在服务初始化完成后继续连上。差异产生于check为true时。

Aqi__的博客 1万+

静态时序分析(STA)_深入解析Data to Data Checks的零周期挑战

本文深入解析了静态时序分析(STA)中Data to Data Checks的核心概念与零周期挑战。重点探讨了当Setup要求值超过时钟周期时,工具如何调整发射沿,并导致Hold检查的发射与捕获沿“分裂”这一反直觉现象。文章通过案例详细解读了时序报告,并提供了通过调整约束或接受多周期保持两种策略来应对这一挑战,帮助工程师正确理解和处理此类复杂时序检查。

weixin_29204205的博客 351

Hadoop与Kafka集群部署与优化实践指南

分布式系统是现代大数据处理的核心架构,其中Hadoop作为分布式存储与计算框架,Kafka作为分布式消息队列系统,共同构成了实时数据处理的基础设施。通过HDFS实现海量数据存储,结合YARN进行资源调度,而Kafka则保障了数据流的实时传输与高吞吐。这种技术组合在电商用户行为分析、物联网数据采集等场景中表现卓越。部署过程中需关注硬件资源配置、关键参数调优以及集群监控方案,例如通过调整HDFS块大小和Kafka partition数量来优化性能。合理运用Flume、Spark Streaming等工具可实现系

weixin_29061997的博客 361

springboot duboo.reference.check不生效问题

前段时间遇到一个问题,调用dubbo服务经常出现空指针异常,重新一下就解决了, 后来定位到问题是dubbo服务没有找到,导致服务对象是null;经排查发现原因是dubbo服务没有配置check=false属性,看dubbo的配置文件里,已经配置了duboo.reference.check=false.查看其他一些文章也提到duboo.reference.check设置成false,后来换成dubbo.consumer.check=false,这样就能生效了。 为了搞清楚原因特地看了一下源码,原来consum

2135

西门子 标准程序解读---> 机器手抓取和涂胶控制程序

摘要 该程序实现机械手在OP70/OP90工位的自动化控制,核心功能包括: 流程控制:分段(Seg1-Seg11)管理抓件、涂胶、放件等动作,结合DB1050/DB1250数据块监控工位状态及变位机位置反馈。 安全机制:配置干涉区(FC124)、实时检测安全光/急停信号,防止碰撞;服务程序(FB191)支持维修位触发与安全隔离。 参数配置:通过DB块关联机器人速度、节拍(FB27)、车型编码(如空过=2)及手自动模式(DB70.DBX21.2)。 应用场景:适用于汽车焊接/装配线

工控智联驿站 1239

dubbo问题合集

文章目录 zk user.name如何修改 zkServer.cmd 一闪而过,可以在cmd中加pause,具体查看错误信息

浅蓝浅蓝 377

Triton server的部署、构建、backend插件机制代码梳理、模型加载、自定义C++backend流程

Triton inference server的部署、构建、backend机制代码详细梳理、模型加载过程、自定义C++backend流程.

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 473

YOLOv8改进有效系列目录 | 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制

Hello,各位读者们好,本专栏自开设两个月以来已经更新改进教程120+余篇其中包含C2f、主干、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新,订阅本专栏以后你不仅可以收获跟专栏的阅读权限,同时可以进Qq群,里面包含集成我所有创新的YOLO最新目录,和我本人录制的视频讲解教程,如果你想要在YOLOv8系列收获一篇论文,我相信订阅本专栏后你一定会有所收获~YOLOv8改进有效系列目录。

Snu77的博客 18万+

Springboot+Dubbo整合

简介当前dubbo是官方宣布更新后最新版本,由于官方并未给出使用spring-boot-starter-dubbo,因此这里使用的是老雷写的开源spring-boot-starter-dubbo 并且已经是支持最新版本的dubbo.spring-boot-starter-dubbo的git地址 https://gitee.com/reger/spring-boot-starter-dubbo/b

牧竹子 1万+

181、LLC谐振变换器的PCB设计实战(文件归档)

PCB设计实战经验总结:LLC谐振变换器的关键要点 本文通过实际案例总结了LLC谐振变换器PCB设计中的核心经验和常见误区。重点包括: 文件命名规范(项目代号_板卡类型_版本号_日期格式) 四层板标准层叠结构设计要点 谐振回路走线原则(宽度、长度控制) 地线处理技巧(功率地/控制地隔离) 散热设计注意事项(MOSFET过孔阵列、变压器布局) 完整的文件归档清单(Gerber、钻孔、装配图等) 作者特别强调,良好的设计归档习惯能显著降低生产问题概率,建议采用双重备份机制。文中多个真实案例(如谐振频率偏移、EM

Jack010169的博客 44

Dubbo从入门到实战:分布式服务开发指南

Dubbo 是阿里巴巴开源的高性能 RPC 框架,主要用于分布式系统中服务之间的调用和管理。

qq_45438032的博客 1219

领域知识图谱构建的技术流程

因此概念的属性定义十分重要,通常大部分知识库中的概念属性都是采用人工定义等方式生成的,通用知识图谱则可以从开放数据集中获取概念的属性,然后从在线百科中学习实体的属性,并对实体属性进行往上规约从而生成概念的属性。由于百科的分类体系都是经过了百科管理员或是高级编辑人员的校验,其分类系统中的数据可靠性非常高,因此从百科中抽取概念和实体,通常将标题作为实体的候选,而将百科中的分类系统直接作为概念的候选。为了对知识进行合理的组织,更好地描述知识本身与知识之间的关联,需要对知识图谱的模式进行良好的定义。

weixin_43961909的博客 334

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SpringBoot + Dubbo + zookeeper实现

逻辑理解 :应用启动起来,dubbo就会扫描指定的包下带有@component注解的服务,将它发布在指定的注册中心中!我们从dubbo官网进入github,看下方的帮助文档,找到dubbo-springboot,找到依赖包。想使用SpringCloud,必须要掌握Springboot,因为它是基于SpirngBoot的。将服务提供者注册到注册中心,我们需要整合Dubbo和zookeeper,所以需要导包。服务注册与发现,zookeeper,没有熔断机制,接住了Hystrix。4.服务挂了,怎么办?

weixin_54097396的博客 1471

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

springboot-15-Dubbo和Zookeeper集成

文章目录Dubbo和Zookeeper集成一、分布式理论1.什么是分布式系统?2.分布式服务架构3.什么是RPC二、测试环境搭建1.Dubbo2.window下安装dubbo-admin3.Zookeeper三、SpringBoot 整合Dubbo + zookeeper Dubbo和Zookeeper集成 一、分布式理论 1.什么是分布式系统? 在《分布式系统原理与范型》一书中有如下定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”; 分布式系统是由一组通过网络进行通信、为

Filwaod 263

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

解决dubbo3使用protobuf序列化问题

背景 dubbo3是今年新推出的革命性版本,之前使用过dubbo2,对dubbo3比较好奇,今天就初次尝鲜。本次项目架构: springboot 基础脚手架 dubbo3 核心服务框架 nacos 注册中心 protobuf 传输协议 问题 按照官方文档教程编写,customer端运行时报以下错误信息: Caused by: java.lang.IllegalArgumentException: This serialization only supports google protobuf objec

3678

SpringBoot+Dubbo构建微服务

随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。 一、先来一张图 说起 Dubbo,相信大家都不会陌生!阿里巴巴公司开源的一个高性能优秀的服务框架,可以使得应用可通过高性能的 RPC 实现服务的输出和输入功能,同时可以和 Spring 框架无缝集成。 Dubbo 架构图 节点角色说明: Provider:暴露服务的服务提供方 Consumer:调用远程服务的服务消费方 Registry:服务注册与发现

Marathon_X的博客 2196

dubbo yml配置_Spring Cloud 与 Dubbo,两种时髦的微服务

如果有一天我们烧了一份宫保鸡丁,烧好后发觉鸡丁嫩滑、火候正好,但是花生米还不够熟,这时候如果再去回锅,鸡丁就会味道变老,这还真是尴尬。传统的Web项目就像这一份宫保鸡丁,所有的功能都在一个服务里,想要对部分的功能进行优化改进,势必会对整个服务产生影响。随着时间的推移,这个服务会越来越大,功能越来越多,有些功能想优化可能会越来越困难,有点牵一发动全身的感觉。微服务架构能够帮我们解决这种困扰...

weixin_39754603的博客 323

Springboot+dubbo+zookeeper学习笔记(二)

时隔数月,第一版基本上线测试,开发组面临第二版重构。因为第一版遭遇需求零碎和管理混乱,毫无节制地修改,导致原来架构好的项目被无情撕碎,体系完全被打乱,程序处处耦合,经常是改完这一处,就会在另一处翻出新问题。加之原来的项目因为无法整体预先规划,四个app和一个管理网站的接口杂揉在一起,臃肿而且杂乱。我就想着赶紧上线,到安排第二版重构的时候实现分布式架构。架构的初始想法,是全部利用SpringClou...

宝华的小岛 501

SpringBoot整合Dubbo

SpringBoot整合Dubbo & zookeeper & Dubbo-admin 一、分布式概述 发展演变 1.1 单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。 缺点 性能扩展比较难 协同开发问题 不利于升级维护 1.2 垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互

冰冰凉的博客 8327

SpringBoot项目集成Dubbo

SpringBoot项目集成Dubbo

qq_51447436的博客 1万+

SpringBoot整合Dubbo的快速使用教程

Apache Dubbo是一款RPC服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang等多语言SDK实现。使用Dubbo开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用Dubbo提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。

胜人者有力,自胜者强! 5089

springboot 使用dubbo项目开发

介绍:我们知道springboot是微服务,dubbo是alibaba一套开源的分布式框架,dubbo其中有注册中心,生产者,消费者,监控,通过rpc方式调用,本章将使用springboot结构构建dubbo项目 下面是官方提供的一张原理图: rpc又是什么? ...

凉白开不加冰 351

springboot+dubbo+zookeeper微服务项目

一、环境的要求 在linux上搭建zookeeper (本项目采用的是zookeeper-3.4.14) 在linux上tomcat下部署dubbo-admin(dubbo-admin-2.5.4) springboot版本2.1.4.RELEASE,dubbo版本2.0.0,zkclient版本0.8 注: 如果项目运行没有报错误,但是服务者和消费者无法注入zookeeper可能该版本有...

SHINE的博客 1529
上一篇: Dubbo OPS(DubboAdmin)使用
下一篇: Sharding-JDBC进行分表分库之初体验
Howinfun
博客等级 码龄10年 165粉丝 213原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值