dubbo简单入门

什么是dubbo

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

dubbo架构

在这里插入图片描述
0.start:服务的提供者运行在类似于tomcat等容器中
1.regisiter:将启动的服务注册到注册中心,dubbo官方有推荐zookeeper作为注册中心
2.subscribe:消费者在注册中心发现提供的服务
3.notify:通知得到服务的路径
4.invoke:RPC,即远程调用服务
5.count:服务监控

dubbo的使用

要使用dubbo我们首先要有一个注册中心,我在这里使用的zookeeper作为注册中心,具体安装步骤以及zookeeper操作可以看我这篇博客。
打开安装好的zookeeper。
之后我们可以新建一个spring项目,导入一下spring要的maven坐标以及spring的xml配置文件。
之后当然也要导入dubbo和zookeeper的maven坐标

   <properties>
        <spring.version>5.1.9.RELEASE</spring.version>
        <dubbo.version>2.7.4.1</dubbo.version>
        <zookeeper.version>4.0.0</zookeeper.version>
    </properties>

<!-- servlet3.0规范的坐标 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!--spring的坐标-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--springmvc的坐标-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!--日志-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.21</version>
        </dependency>

当然之后我们还需到spring的xml配置文件中加入dubbo的配置

<!--配置项目名称-->
    <dubbo:application name="dubbo-web">
        <dubbo:parameter key="qos.port" value="33333"/>
    </dubbo:application>

    <!--配置注册中心地址-->
    <dubbo:registry address="zookeeper://192.168.88.130:2181"/>

    <!--配置dubbo包扫描-->
    <dubbo:annotation package="com.cjh.controller"/>

之后我们可以先写一个标准的springMVC

这里是controller

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/sayHello")
    public String sayHello(){
        return userService.sayHello();
    }

    @RequestMapping("/find")
    public User find(int id){
        return userService.findUserById(id);
    }

}

而将这个controller使用dubbo非常的简单,只需要将@Autowired注解改成dubbo的@Reference注解。

而我们的serviceImpl也很简单

//@Service  将该类的对象创建出来,放到spring的IOC容器中 bean定义


@Service  //将该类提供的服务对外发布,将访问的地址 ip 端口 路径注册到注册中心
public class UserServiceImpl implements UserService {
    @Override
    public String sayHello() {
        return "hello dubbo";
    }

    @Override
    public User findUserById(int id) {
        User user=new User(1,"张三","123456");
        return user;
    }
}

要注意的是这里虽然还是@Service注解,但是作用和spring的@Service还是有区别的

其他地方和我们的正常springMVC没有区别。

dubbo-admin

dubbo-admin是一个图形化界面,用于管理dubbo提供的服务
从注册中心获取所有的提供者、消费者进行配置管理
提供路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡等管理功能

安装dubbo-admin

dubbo-admin是一个前端VUE后端springboot的软件,所以我们需要先安装一个node.js,用于启动前端的VUE服务
node安装地址

之后下载我们的安装包,下载地址

进去记得选一下分支的版本,我这里用的是一个develop版本

选择clone还是直接下载,都可以

下载玩安装包后,我们进入到dubbo-admin-develop\dubbo-admin-server\src\main\resources下的一个application.properties文件,进入之后我们修改一下zookeeper的ip地址

# centers in dubbo2.7
admin.registry.address=zookeeper://192.168.149.135:2181
admin.config-center=zookeeper://192.168.149.135:2181
admin.metadata-report.address=zookeeper://192.168.149.135:2181

在之后的步骤中我们要一直

在之后,我们回到根目录,进入到powershell或cmd中,执行我们mave的打包命令

mvn clean package

这里我们要注意的是一定要用JDK8,我之前就应为JDK的版本不对,导致半天没有安装成功

当我们完成打包后,我们就可以去执行我们的后端程序了
我们进入到server中的target目录下,运行jar包
在这里插入图片描述
当我们在最后看到了端口号,就意味着我们后端已经启动了

之后进入到dubbo-admin-develop\dubbo-admin-ui目录中
执行一下命令,启动我们的前端

npm run dev

之后我们的cmd界面就会出现一个网址
在这里插入图片描述
进入这个网址,就是我们的图形化界面
在这里插入图片描述

当然要注意的是,我的zookeeper是在Linux虚拟机中,所以不会有端口占用的问题,如果你的zookeeper在本地,就需要进入到最开始的properties文件中改一下默认的端口号

dubbo-admin的使用

我们启用一个我们的一个dubbo程序,来看看dubbo的一些功能

服务查询

在这里插入图片描述

在这里可以看到我们服务的一个状态

当然如果你第一次进去,会发现地下的元数据是不可用的,这里就需要我们进入到一个service中的spring的xml配置文件中给元数据服务一个注册中心

   <!-- 元数据配置 -->
    <dubbo:metadata-report address="zookeeper://192.168.149.135:2181" />

序列化

dubbo内部为我们内置序列化和反序列化,所以我们只需要将我们的实体类继承一下Serializable接口

地址缓存

就是当我们的注册中心挂了,我们通过缓存的服务地址,依旧可以访问服务,不影响我服务的正常使用

版本控制

我们可以在服务提供方的@Service注解后面增加一个version属性,所以我们就可以用多个不同的service服务,然后我们就能通过在controller中的@Reference注解的后面也加上version属性,自己选择服务的版本,如果要更改版本只需要我们的客户端重启一下就可以。这种更新方式我们叫做灰度更新。

负载均衡

负载均衡是针对我们的服务器集群使用的,为了防止我们的某台服务器一直满负荷工作,而其他服务器却在看戏的情况。
通过在服务的提供方的@Service注解后面增加一个weight属性,以此为我们的不同服务直接提供不同的权重。
然后我们在消费者的@Reference注解后面增加一个loadbalance属性,用于指定我们的负载均衡的策略。
dubbo为我们提供了四种负载均衡的策略
Random:按权重随机。即按权重设置概率
RoundRobin:按权重轮询。即按权重设置一个循环中按权重设置次数
LeastActice:最少活跃调用次数,相同活跃数的随机
ConsistentHash:一致性Hash,相同参数的请求总是发到同一提供者。

集群容错

即我们的集群服务中有一台或几台挂了,不会影响我们提供服务

服务降级

当我们的流量比较高的时候,我们的服务器的压力比较大,为了减轻我们服务器的压力我们可以选择一些不重要的服务直接不提供,例如一些广告服务。
我们可以通过在消费者的@Reference注解后面添加一个mock=force:return false,表示直接不调用该服务

内容概要:本文系统梳理了多个科研领域的前沿研究与技术实现,重点涵盖FDTD方法中的完美匹配层(PML)研究,以及Matlab/Simulink在电磁、电力、控制、通信、信号处理、图像处理、路径规划、能源系统优化等领域的仿真与算法实现。文中列举了大量基于Matlab和Python的科研案例,如风电功率预测、负荷预测、无人机三维路径规划、电池系统故障诊断、雷达模拟、通信编码、微电网优化调度等,强调结合智能优化算法(如粒子群、遗传算法、深度学习等)提升系统性能。同时,提供了丰富的代码资源与仿真模型,涵盖永磁同步电机控制、逆变器设计、多智能体任务配、虚拟电厂调度等复杂系统,助力科研人员快速开展复现实验与创新研究。; 适合人群:具备一定编程基础,熟悉Matlab/Python工具,从事电气工程、自动化、通信、人工智能、新能源、控制科学等相关领域研究的研发人员及研究生。; 使用场景及目标:① 学习实现FDTD仿真中的PML边界条件以有效抑制数值反射;② 掌握Matlab/Simulink在多物理场建模、控制系统设计与优化算法中的综合应用;③ 借助提供的代码资源完成科研复现、课程设计、竞赛项目或工程原型开发; 阅读建议:此资源以科研实战为导向,不仅提供理论方法,更强调代码实现与仿真验证。建议读者结合自身研究方向,按目录顺序查阅相关模块,下载配套代码进行调试与二次开发,以达到学以致用、融会贯通的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风过于前

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值