Java分布式框架dubbo教程

Java分布式框架dubbo教程

目标

在这里插入图片描述
在这里插入图片描述

集群和分布式

在这里插入图片描述

集群:很多“人”一起,干一样的事
一个业务模块,部罢在多台服务器上
分布式:很多“人”一起,干不一样的事。这些不一样的事,合起来是一件大事
一个大的业务系统,拆分为小的业务模块,分别部署在不同的机器上

框架演进

在这里插入图片描述

分布式框架
在这里插入图片描述
SOA框架
在这里插入图片描述

微服务架构

在这里插入图片描述

Dubbo架构

![](https://img-blog.csdnimg.cn/5f3a9cf4d95d45dfb66bb5fef9a27d40.png)

快速入门

在这里插入图片描述

feign远程调用与Dubbo远程调用区别

其实和feign远程调用是一个意思,Feign和Dubbo都可以实现远程调用,他们都依赖注册中心,他们都支持负载均衡,
服务熔断。

自己理解:
1、然而Feign是基于Http协议,Dubbo是基于业务来的。粒度一个是http接口级一个方法级
2、一个是短连接,一个长连接
3、一个适合简洁少侵入,一个适合少数据高并发

大牛说:

Feign和Dubbo都可以实现远程调用,他们都依赖注册中心,他们都支持负载均衡,服务熔断。

然而Feign是基于Http协议。服务提供者需要对外暴露Http接口供消费者调用(例如我们用@openFeign注解来标识远程调用服务的接口时,需要加@RequestMapping)**服务粒度是http接口级**的。通过**短连接**的方式进行通信,不适合**高并发**的访问。Feign追求的是**简洁,少侵入**(因为就服务端而言,在SpringCloud环境下,不需要做任何额外的操作,而Dubbo的服务端需要配置开放的Dubbo接口)。

至于Dubbo,Dubbo支持多传输协议(Dubbo、Rmi、http、redis等等),可以根据业务场景选择最佳的方式,非常灵活。默认的Dubbo协议:利用Netty,TCP传输,单一、异步、**长连接**,适合数据量小、高并发和服务提供者远远少于消费者的场景。Dubbo通过TCP长连接的方式进行通信,服务粒度是方法级的。

从协议层选择看,Dubbo是配置化的,更加灵活。Dubbo协议更适合小数据高并发场景。
feign接口
@FeignClient(value = "leadnews-article",fallback = IArticleClientFallback.class)
public interface IArticleClient {

    @PostMapping("/api/v1/article/save")
    public ResponseResult saveArticle(@RequestBody ArticleDto dto);
}

2、在继承的模块中调用此方法
@Autowired
    private IArticleClient articleClient;
ResponseResult responseResult = articleClient.saveArticle(dto);

3、在需要调用的模块中定一个feign接口的实现类,风格为正常controller形式
@RestController
public class ArticleClient implements IArticleClient {

    @Autowired
    private ApArticleService apArticleService;

    @PostMapping("/api/v1/article/save")
    @Override
    public ResponseResult saveArticle(@RequestBody ArticleDto dto) {
        return apArticleService.saveArticle(dto);
    }
}

Dubbo
1、抽象出需要调用方法

public interface UserService {
    public String sayHello();
}

2、提供者方:@Service给Dubbo提供方法,配置扫描


@Service//将这个类提供的方法(服务)对外发布。将访问的地址 ip,端口,路径注册到注册中心中
public class UserServiceImpl implements UserService {

    public String sayHello() {
        return "hello dubbo hello!~";
    }
}

<!--dubbo的配置-->
	<!--1.配置项目的名称,唯一-->
	<dubbo:application name="dubbo-service"/>
	<!--2.配置注册中心的地址-->
	<dubbo:registry address="zookeeper://192.168.149.135:2181"/>
	<!--3.配置dubbo包扫描-->
	<dubbo:annotation package="com.itheima.service.impl" />

3、消费者方同样需要把controller交给Dubbo,@Reference注解远程注入,创建代理对象实现远程调用。

<!--dubbo的配置-->
    <!--1.配置项目的名称,唯一-->
    <dubbo:application name="dubbo-web" >
        <dubbo:parameter key="qos.port" value="33333"/>
    </dubbo:application>
    <!--2.配置注册中心的地址-->
    <dubbo:registry address="zookeeper://192.168.149.135:2181"/>
    <!--3.配置dubbo包扫描-->
    <dubbo:annotation package="com.itheima.controller" />

1. 从zookeeper注册中心获取userService的访问url
2. 进行远程调用RPC
3. 将结果封装为一个代理对象。给变量赋值
@Reference//远程注入
    private UserService userService;


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

Dubbo 高级特性

在这里插入图片描述
在这里插入图片描述
会自动缓存之前之前使用过的
在这里插入图片描述
在这里插入图片描述

灰度发布:当出现新功能时,会让一部分用户先使用新功能,用户反馈没问题时,再将所有用户迁移到新功能。
dubbo 中使用version 属性来设置和调用同一个接口的不同版本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值