Dubbo(2)Dubbo的核心组件有哪些?

Dubbo的核心组件包括以下几个:

  1. Provider(服务提供者):暴露服务的服务方。
  2. Consumer(服务消费者):调用远程服务的服务方。
  3. Registry(注册中心):服务注册与发现的中心。
  4. Monitor(监控中心):统计服务调用次数和调用时间的监控中心。
  5. Container(服务运行容器):服务运行的容器。

下面我们详细深入地介绍每个组件,并结合代码示例展示其具体实现。

1. Provider(服务提供者)

服务提供者是指暴露服务的服务方。Provider通过注册中心将服务注册,供消费者调用。

服务接口

首先定义一个服务接口:

java 复制代码
package com.example;

public interface DemoService {
    String sayHello(String name);
}

服务实现

然后实现这个接口:

java 复制代码
package com.example;

import org.apache.dubbo.config.annotation.DubboService;

@DubboService
public class DemoServiceImpl implements DemoService {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name;
    }
}

Spring 配置

在Spring配置文件中暴露这个服务:

xml 复制代码
<dubbo:service interface="com.example.DemoService" ref="demoServiceImpl" />

2. Consumer(服务消费者)

服务消费者是指调用远程服务的服务方。Consumer通过注册中心订阅自己所需的服务列表,然后通过负载均衡策略选择一个服务提供者进行调用。

引用远程服务

在消费者端,引用远程服务:

xml 复制代码
<dubbo:reference id="demoService" interface="com.example.DemoService" />

服务调用

在代码中调用远程服务:

java 复制代码
package com.example;

import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component;

@Component
public class DemoServiceConsumer {
    
    @DubboReference
    private DemoService demoService;

    public void execute() {
        String message = demoService.sayHello("World");
        System.out.println(message);
    }
}

3. Registry(注册中心)

注册中心是服务注册与发现的中心。提供者在启动时,将自己提供的服务注册到注册中心。消费者在启动时,从注册中心订阅自己所需的服务列表。

配置注册中心

使用ZooKeeper作为注册中心:

xml 复制代码
<dubbo:registry address="zookeeper://127.0.0.1:2181" />

如果使用Spring Boot,可以通过配置文件来简化配置:

yaml 复制代码
dubbo:
  registry:
    address: zookeeper://127.0.0.1:2181

4. Monitor(监控中心)

监控中心用于统计服务调用次数和调用时间的监控中心。

配置监控中心

xml 复制代码
<dubbo:monitor protocol="registry" />

配置监控中心的地址:

yaml 复制代码
dubbo:
  monitor:
    protocol: registry

5. Container(服务运行容器)

服务运行容器是指服务运行的容器。Dubbo提供了多种容器实现,如Spring容器、Jetty容器等。

Spring 容器

在Spring配置文件中启动Dubbo服务:

xml 复制代码
<dubbo:application name="dubbo-demo-provider" />
<dubbo:protocol name="dubbo" port="20880" />

Spring Boot 集成:

yaml 复制代码
dubbo:
  application:
    name: dubbo-demo-provider
  protocol:
    name: dubbo
    port: 20880

综合示例

服务提供者

java 复制代码
package com.example;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

package com.example;

import org.apache.dubbo.config.annotation.DubboService;

@DubboService
public class DemoServiceImpl implements DemoService {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name;
    }
}

服务消费者

java 复制代码
package com.example;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

package com.example;

import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component;

@Component
public class DemoServiceConsumer {
    
    @DubboReference
    private DemoService demoService;

    public void execute() {
        String message = demoService.sayHello("World");
        System.out.println(message);
    }
}

配置文件

application.yml(Provider)
yaml 复制代码
dubbo:
  application:
    name: dubbo-demo-provider
  registry:
    address: zookeeper://127.0.0.1:2181
  protocol:
    name: dubbo
    port: 20880
application.yml(Consumer)
yaml 复制代码
dubbo:
  application:
    name: dubbo-demo-consumer
  registry:
    address: zookeeper://127.0.0.1:2181
  scan:
    base-packages: com.example

总结

Dubbo通过这几个核心组件,解决了分布式服务架构中的服务注册与发现、负载均衡、容错、服务监控等问题。通过上述代码示例,可以看到Dubbo的使用非常简单,开发者只需关注业务逻辑,无需关心底层的通信细节和服务治理问题。

相关推荐
uhakadotcom4 分钟前
如何从阿里云的sls日志中清洗出有价值的信息?
后端·面试·github
李昊哲小课8 分钟前
spring 中 HttpStatus 与 ResponseEntity
spring boot·后端·spring·http·spring cloud·restful
间彧28 分钟前
Java 堆、栈、方法区详解与项目实战
后端
间彧31 分钟前
Java内存区域详解与项目实战
后端
SimonKing33 分钟前
【开发者必备】Spring Boot 2.7.x:WebMvcConfigurer配置手册来了(三)!
java·后端·程序员
ArabySide35 分钟前
【Spring Boot】深入浅出Spring Boot中的控制反转与依赖注入
java·spring boot·后端
shepherd11136 分钟前
破局延时任务(上):为什么选择Spring Boot + DelayQueue来自研分布式延时队列组件?
java·spring boot·后端
非凡ghost1 小时前
EaseUS Fixo(易我视频照片修复)
前端·javascript·后端
非凡ghost1 小时前
Avast Cleanup安卓版(手机清理优化)
前端·javascript·后端
豆苗学前端1 小时前
长时间不操作自动退出登录(系统非活跃状态下自动登出机制的企业级设计方案)
前端·后端·面试