栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Dobbo

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Dobbo

1、Dobbo概念

Dubbo是阿里巴巴公司开源的一个高性能、轻量级的Java RPC框架。

致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA|服务治理方案。

官网: http://dubbo.apache.org

2、Zookeeper安装并连接

applicationContext.xml







	
	
	
	
	
	
	

解压zookeeper的tar包

修改zoo_sample.cfg为zoo.cfg并更改数据存放位置

dataDir=/opt/zkdata

启动方式,在bin路径下用./zkService.sh start 启动

3、快速入门

提取公共接口进行调用


dubbo架构

 3、duboo的高级特性 dubbo-admin

dubbo-admin管理平台,是图形化的服务管理页面

从注册中心中获取到所有的提供者/消费者进行配置管理

路由规则、动态配置、服务降级、访问控制、权重调整、负载均衡等管理功能

dubbo-admin是一个前后端分离的项目。前端使用vue后端使用springboot 

安装dubbo-admin其实就是部署该项目

4、dubbo序列化

 

 5、地址缓存

注册中心挂了,服务是否可以正常访问?

 可以,因为dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心。 

当服务提供者地址发生变化时,注册中心会通知服务消费者。 

6、dubbo超时与重试

服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去。  

单用户单线程

 多用户多线程

在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩。 

 在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩。

dubbo利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。使用timeout属性配置超时时间,默认值1000,单位毫秒。 

服务的提供方
package com.shun.service.impl;

import com.shun.pojo.User;
import com.shun.service.UserService;
import org.apache.dubbo.config.annotation.Service;


//@Service//将该类的对象创建出来,放到Spring的IOC容器中  bean定义
//将这个类提供的方法(服务)对外发布。将访问的地址 ip,端口,路径注册到注册中心中
@Service(timeout = 3000,retries = 2)//当前服务3秒超时,重试2次,一共3次
public class UserServiceImpl implements UserService {

    int i = 1;
    public String sayHello() {
        return "hello shun dubbo";
    }

    public User userById(int id) {
        System.out.println("服务被调用了:"+i++);
        //查询User对象
        User user = new User(1,"zhangsan","123");
        //数据库查询很慢,查了5秒

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return user;
    }
}
服务的消费方
package com.itheima.controller;

import com.itheima.pojo.User;
import com.itheima.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

    //注入Service
    //@Autowired//本地注入

    

    @Reference(timeout = 1000)//远程注入
    private UserService userService;


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

    
    int i = 1;
    @RequestMapping("/find")
    public User find(int id){

        new Thread(new Runnable() {
            public void run() {
                while (true){
                    System.out.println(i++);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();


        return userService.findUserById(id);
    }

}

7、dubbo多版本

    @Reference(version = "v2.0")//远程注入
    private UserService userService;

@Service(version = "v1.0")//当前服务3秒超时,重试2次,一共3次
public class UserServiceImpl implements UserService {}

@Service(version = "v2.0")//当前服务3秒超时,重试2次,一共3次
public class UserServiceImpl2 implements UserService {
 8、负载均衡

@Reference(loadbalance = "random")//远程注入
private UserService userService;


@Service(weight = 100)
public class UserServiceImpl implements UserService {


@Service(weight = 200)
public class UserServiceImpl implements UserService {

 9、集群容错

    @Reference(cluster = "failover")//远程注入
    private UserService userService; 
10、服务降级

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/874656.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号