dubbo service注解用法_Dubbo---开源分布式服务框架(一)

24832100888576f532a1c37022cd4447.png

当一个人先从自己的内心开始奋斗,他就是个有价值的人

【Dubbo】

主要内容

  1. Dubbo简介
  2. Dubbo架构讲解
  3. Dubbo支持的协议
  4. Dubbo支持的注册中心
  5. 第一个Dubbo的Provider
  6. Admin管理界面搭建
  7. 完成Dubbo的Consumer
  8. 完整Dubbo项目演示

一、 Dubbo简介

1. 官方说明

5d6ec3e6fd0709b01239282d2fc4296b.png

Apache Dubbo 是一个高可用的,基于Java的开源RPC框架。

Dubbo框架不仅仅是具备RPC访问功能,还包含服务治理功能。

2. 发展历史

  • Dubbo是最开始是阿里巴巴内部使用的RPC框架。
  • 2011年对外提供。
  • 2012年停止更新。
  • 2017年开始继续更新。
  • 2019年捐献给Apache,由Apache维护2.7以上版本。

二、 Dubbo架构讲解

1. 架构图

ae49727c6af6cd0098fac4eb8266c09e.png

2. 架构说明

2.1 虚线

虚线表示异步,实线表示同步。异步不阻塞线程性能高,同步阻塞线程必须等待响应结果才能继续执行,相对性能低。

2.2 Provider

提供者。编写持久层、业务层和事务代码。

2.3 Container

容器(Spring容器),Dubbo完全基于Spring实现的。

2.4 Registry

注册中心。放置所有Provider对外提供的信息。包含Provider的IP,访问端口,访问遵守的协议,对外提供的接口,接口中有哪些方法等相关信息。

2.5 Consumer

消费者(RPC调用者,SOA调用服务的项目)开发中也是一个项目,编写service和controller(还可以包括页面等)。调用远程服务实现(XXXXServiceImpl)中的方法。

2.6 Monitor

监控中心。监控Provider的压力情况等。每隔2分钟Consumer和Provider会把调用次数发送给Monitor,由Monitor进行统计。

3. 执行流程

  1. start:启动Spring容器时会把Provider启动。
  2. register:把Provider相关信息注册到Registry里
  3. subscribe:Consumer从Registry中订阅Provider的信息
  4. notify:通知给Consumer
  5. invoke:Consumer根据Registry通知的信息进行调用Provider中方法。
  6. count:Consumer和Provider把调用次数信息异步发送给Monitor进行统计。

三、 Dubbo支持的协议

1. Dubbo协议(官方推荐协议)

  • 优点:

采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用)

  • 缺点:

大文件上传时,可能出现问题(不使用Dubbo实现文件传输)

2. RMI(Remote Method Invocation)协议

  • 优点:

JDK自带的能力。

  • 缺点:

偶尔连接失败.

3. Hessian协议

  • 优点:

可与原生Hessian互操作,基于HTTP协议

  • 缺点:

需hessian.jar支持,http短连接的开销大

四、 Dubbo支持的注册中心

1. Zookeeper(官方推荐)

  • 优点:

支持分布式.很多周边产品.

  • 缺点:

受限于Zookeeper软件的稳定性.Zookeeper专门分布式辅助软件,稳定较优

2. Multicast

  • 优点:

去中心化,不需要单独安装软件.

  • 缺点:

2.2.1 Provider、Consumer和Registry不能跨机房(路由)

3. Redis

  • 优点:

支持集群,性能高

  • 缺点:

要求服务器时间同步.否则可能出现集群失败问题.

4. Simple

  • 优点:

标准RPC服务.没有兼容问题

  • 缺点:

不支持集群.

五、 第一个Dubbo的Provider

新建父项目Parent1。最终结构如下:

430d7feee6b5770daf813116aca604b4.png

编写pom.xml继承SpringBoot父项目。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.5.RELEASE</version>
</parent>

1. 新建api项目

1.1 创建接口

创建com.bjsxt.dubbo.service.DemoDubboService接口

public interface DemoDubboService {
    String demo();
}

2 新建provider项目

2.1 编写pom.xml

注意:不需要依赖web,如果依赖spring-boot-start-web还需要考虑端口问题。

<dependencies>
    <dependency>
        <artifactId>api</artifactId>
        <groupId>com.bjsxt</groupId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>4.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>4.2.0</version>
    </dependency>
</dependencies>

2.2 编写配置文件

新建application.yml

dubbo:
  application:
    name: dubbo-provider
  registry:
    address: zookeeper://192.168.32.128:2181

2.3 新建实现类

新建com.bjsxt.dubbo.service.impl.DemoDubboServiceImpl

注意:注解是apache的注解。

import com.bjsxt.dubbo.service.DemoDubboService;
import org.apache.dubbo.config.annotation.Service;

@Service
public class DemoDubboServiceImpl implements DemoDubboService {
    @Override
    public String demo() {
        System.out.println("demo方法");
        return "123";
    }
}

2.4 新建启动类

新建com.bjsxt.ProviderApplication。

必须要有@EnableDubbo注解,否则Dubbo不生效。

@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class,args);
    }
}

六、admin管理界面搭建

1. dubbo-admin-server-0.2.0.jarBOOT-INFclasses 中application.properties里面注册中心的ip设置正确

a081232e977ba6e9421de79565ff9dc7.png

2. 使用java -jar dubbo-admin-server-0.2.0.jar运行即可。访问http://localhost:8080可以进入Dubbo Admin管理控制台。

注意:占用8080端口,不要冲突了。

七、 完成Dubbo的Consumer

创建consumer项目

1. 编写pom.xml

<dependencies>
    <dependency>
        <artifactId>api</artifactId>
        <groupId>com.bjsxt</groupId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>4.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>4.2.0</version>
    </dependency>
</dependencies>

2. 新建配置文件

新建application.yml

dubbo:
  application:
    name: dubbo-consumer
  registry:
    address: zookeeper://192.168.32.128:2181

3. 新建service及实现类

新建com.bjsxt.service.DemoService

public interface DemoService {
    String consumerDemo();
}

新建com.bjsxt.service.impl.DemoServiceImpl

调用服务使用@Reference注解,不要导错包了,有两个。

import com.bjsxt.dubbo.service.DemoDubboService;
import com.bjsxt.service.DemoService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

@Service
public class DemoServiceImpl implements DemoService {

    @Reference
    private DemoDubboService demoDubboService;

    @Override
    public String consumerDemo() {
        return demoDubboService.demo();
    }
}

4. 新建控制器

新建控制器com.bjsxt.controller.DemoController

@Controller
public class DemoController {
    @Autowired
    private DemoService demoService;

    @RequestMapping("/demo")
    @ResponseBody
    public String demo(){
        return demoService.consumerDemo();
    }
}

5. 新建启动器

新建com.bjsxt.ConsumerApplication

@SpringBootApplication
@EnableDubbo
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class,args);
    }
}

需要更多Java学习资料的可以到评论区留言或者私信哦,视频、源码、项目,通通都给你

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值