• Dubbo使用入门xml配置


    Dubbo一个分布式、高性能、透明化的RPC服务框架,提供服务自动注册、自动发现等高效服务治理方案。

    • Dubbo 设计抽象出来的角色如下图:

    这里写图片描述

    Consumer : 是一个抽象概念,是Dubbo抽象出来的消费者角色;

    Provider : 是一个提供服务的生产者角色;

    Registry : 表示Dubbo的注册中心,实际上Dubbo并没有这样的注册中心,只是抽象出了这个概念;

    Monitor : 监控类型的一个角色;

    首先 Provider 把一个服务注册到注册中心上,然后Consumer 获取到这些服务,来调用Provider 或者当Provider 提供的服务有变化时,也会相应的通知Consumer ,Provider 和 Consumer 发生调用是都会通知Monitor ;

    • 生产者 (provider)

    生产者 是Dubbo抽象出来的一个角色,又叫服务提供者 主要是暴露服务的提供方,在生产者中通常是提供一个既有的接口然后将其发布到服务的注册中心上,发布完后等待其他的消费者消费它,启动生产者的时候,通常伴随着启动容器,如一些IO容器,http、Netty等容器启动好容器后,会有监听者监听请求,而Dubbo是一个多线程的处理机制,他的主函数会一直等待,直到java进程shut down的时候,他会同时停止相应的容器,伴随启动容器会有个特征,就是通常我们启动了Dubbo应用,就会占用一个端口,作为生产者来说,只要是服务提供方,所以他会将服务注册到注册中心上,一般注册上zookeeper或者其他上,消费者就会发现这些服务

    • provider 调用的过程

    这里写图片描述

    • 生产者配置

    • 消费者 (consumer)

    消费者 也是Dubbo抽象出来的一个角色,主要是作为dubbo接口的消费的一方,dubbo要消费服务,必须要启动远程调用,同时还要做服务发现和接口代理,他需要zookeeper和其它的方式来发现以及提供的接口,同时还要根据配置的接口生成的对象,这样是使用接口的时候会更加方便,对dubbo来说他还提供了负责均衡和服务容错策略,所以在消费者这一层,负载均衡和服务容错的是比较重要。

    • consumer 调用的过程

    这里写图片描述

    通过示例DEMO介绍dubbo

    • 定义一个远程服务接口
    • 生产者(provider)发布远程服务到注册中心
    • 消费者(consumer)自动发现远程服务并完成服务调用

    定义接口

    定义服务接口: (该接口需单独打包,在服务提供方和消费方共享)
    DemoService.java

    package com.jxl.cloub.dubbo;
    
    public interface DemoService {
    
        String sayHello(String name);
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 生产者Provider实现

    服务提供方实现接口(对服务消费方隐藏实现):
    DemoServiceImpl.java

    package com.jxl.cloub.kafka.dubbo.prvoider;
    
    import com.jxl.cloub.dubbo.DemoService;
    
    public class DemoServiceImpl implements DemoService{
        public String sayHello(String name) {
            return "hello"+name;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    用Spring配置声明暴露服务:
    spring-dubbo-provider.xml

    
    
    
    
         
        
    
    
    
    
     
        
    
        
        
    
        
        
    
        
        
    
        
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    加载Spring配置:
    Provider.java

    package com.jxl.cloub.kafka.dubbo.prvoider;
    
    import java.io.IOException;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Provider{
    
        public static void main(String[] args) throws IOException {
    
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                    new String[] {"META-INF.spring/spring-dubbo-provider.xml"});
            context.start();
            System.in.read();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • java Application 启动Provider,启动成功

      log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
      log4j:WARN Please initialize the log4j system properly.

    命令进入zookeeper集群客户端查看 声明需要暴露的服务接口com.jxl.cloub.dubbo.DemoService,是否有注册到zk中;命令进入到zookeeper/bin/目录下,执行一下命令:

    # ./zkCli.sh 
    
    • 1

    这里写图片描述

    执行一下命令:

     ls /
    
    • 1

    这里写图片描述

    执行一下命令:

    ls /dubbo/com.jxl.cloub.dubbo.DemoService/providers
    
    • 1

    这里写图片描述

    暴露的服务接口com.jxl.cloub.dubbo.DemoService 已经注册成功

    • 消费者Consumer实现

    通过Spring配置引用远程服务:
    spring-dubbo-consumer.xml

    
    
    
    
    
        
    
    
    
    
        
        
    
        
        
    
        
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    加载Spring配置,并调用远程服务:(也可以使用IoC注入)
    Consumer.java

    package com.jxl.cloub.kafka.dubbo.consumer;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import com.jxl.cloub.dubbo.DemoService;
    
    public class Consumer {
    
        public static void main(String[] args) throws Exception {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                    new String[] {"META-INF.spring/spring-dubbo-consumer.xml"});
            context.start();
    
            DemoService demoService = (DemoService)context.getBean("demoService"); // 获取远程服务代理
            String st = demoService.sayHello(" world"); // 执行远程方法
    
            System.out.println( st ); // 显示调用结果
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • java Application 启动Consumer,启动成功

    这里写图片描述

    我们看到 控制台 打印出了 hello world ,说明 Provider 发布远程服务到注册中心
    Consumer 自动发现远程服务并完成服务调用;

    这里最好用Maven项目,方便包的依赖 以及Dubbo包的依赖,项目pom.xml配置如下:

    
        4.0.0
        com.jxl.cloub
        jxl_kafkademo
        war
        0.0.1-SNAPSHOT
        jxl Maven Webapp
        http://maven.apache.org
        
            
                junit
                junit
                3.8.1
                test
            
    
            
            
                org.apache.kafka
                kafka_2.10
                0.8.2.0
            
    
            
            
                com.alibaba
                dubbo
                2.4.10
            
    
            
            
                com.101tec
                zkclient
                0.4
            
    
            
            
                org.springframework
                spring-context
                3.2.8.RELEASE
            
            
                org.springframework
                spring-test
                3.2.8.RELEASE
                test
            
            
                org.springframework
                spring-beans
                3.2.8.RELEASE
            
            
            
                com.jxl.cloub
                demo_dubbo
                0.0.1-SNAPSHOT
            
    
        
        
            jxl_kafkademo
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
  • 相关阅读:
    专业软件测评中心分享:科技成果验收测试报告的作用
    微信小程序之console.log()使用
    Linux 性能调优之硬件资源监控
    OpenEuler 部署kubesphere网络配置防火墙规则 开放端口访问 确保基础设施组件可以通过特定端口相互通信
    go语言并发实战——日志收集系统(八) go语言操作etcd以及利用watch实现对键值的监控
    问题解决:NPM 安装 TypeScript出现“sill IdealTree buildDeps”
    C练题笔记之:Leetcode-658. 找到 K 个最接近的元素
    闭关之 Vulkan 应用开发指南笔记(一):概述、内存和资源
    EIP-1559
    Elasticsearch
  • 原文地址:https://blog.csdn.net/m0_67390963/article/details/126327966