Dubbo分布式框架实战

Dubbo分布式框架实战

Dubbo:2011年阿里巴巴开源的分布式服务框架。
三个主要功能:
(1)远程接口调用:Dubbo提供了基于高性能接口的RPC,对用户是透明的。
(2)负载均衡和容错:Dubbo支持开箱即用的多种负载平衡策略,可感知下游服务状态以减少总体延迟并提高系统吞吐量。
(3)服务注册和服务发现:Dubbo支持多个服务注册表,可以立即检测在线/离线服务。

Dubbo架构:

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

Dubbo例子(基于maven工程):

1.在根目录下创建3个子包
(1)dubbo-interfacce:通用服务接口
(2)dubbo-provider:依赖dubbo-interface,开发实现类,并且配置spring文件,发布服务
(3)dubbo-consumer:依赖dubbo-interface,配置spring配置文件,调用服务

2.dubbo-provider和dubbo-consumer的pom文件中引入共同依赖:

   <dependencies>
        <dependency>
            <groupId>com.qiuzelin</groupId>
            <artifactId>dubbo-interface</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--引入dubbo依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.8</version>
        </dependency>
        <!-- zookeeper客户端依赖 -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
    </dependencies>

4.dubbo-interface:
创建接口:

package com.qiuzelin.service;

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: qiuzelin
 * @Date: 2020/09/29/11:02
 * @Description:
 */
public interface IUserService {
    
    
    public String hello();
}

5.dubbo-provider配置:
(1)创建interface服务实现类:

package com.qiuzelin.service.impl;

import com.qiuzelin.service.IUserService;

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: qiuzelin
 * @Date: 2020/09/29/11:07
 * @Description:
 */
public class UserServiceImpl implements IUserService {
    
    
    public String hello() {
    
    
        return "hello,dubbo!";
    }
}

(2)在resources中创建dubbo-provider.xml配置文件

<!--1.定义应用的名称    -->
    <dubbo:application name="dubbo-provider"/>
<!--2.定义协议端口    -->
    <dubbo:protocol port="28800"/>
<!--3.定义注册中心地址    -->
    <dubbo:registry protocol="zookeeper" address="192.168.157.128:2181"/>
<!--4.定义服务提供者    -->
    <bean id="userService" class="com.qiuzelin.service.impl.UserServiceImpl"/>
    <dubbo:service interface="com.qiuzelin.service.IUserService" ref="userService"/>

(3)创建Provider类(通过启动Spring容器,发布服务):

package com.qiuzelin.service.impl;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: qiuzelin
 * @Date: 2020/09/29/15:19
 * @Description: 启动spring容器,自动发布服务
 */
public class Provider  {
    
    
    public static void main(String[] args) throws IOException {
    
    
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {
    
    "classpath:dubbo-provider.xml"});
        context.start();
        System.out.println("Provider started!");
        System.in.read(); // 按任意键退出
    }
}

运行Provider类的main方法测试:
在这里插入图片描述

5.dubbo-consumer配置:
(1)在resources中创建dubbo-consumer.xml配置文件:

<!--1.定义应用的名称    -->
    <dubbo:application name="dubbo-consumer"/>
    <!--2.定义注册中心地址    -->
    <dubbo:registry protocol="zookeeper" address="192.168.157.128:2181"/>
    <!--3.引用服务    -->
    <dubbo:reference interface="com.qiuzelin.service.IUserService" id="userService"/>

(2)创建Consumer类,调用远程服务

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: qiuzelin
 * @Date: 2020/09/29/15:38
 * @Description:
 */
public class Consumer {
    
    
    public static void main(String[] args) throws IOException {
    
    
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {
    
    "classpath:dubbo-consumer.xml"});
        context.start();
       //获取远程服务
        IUserService userService=context.getBean(IUserService.class);
        System.out.println("获取远程服务端反馈信息"+userService.hello());
    }
}

运行main方法测试:
在这里插入图片描述

注意:在测试Consumer时,Provider进程不能终止,否则会报错。

输入服务器地址与tomcat端口号查看:
在这里插入图片描述
应用进程中存在provider和consumer。

`

猜你喜欢

转载自blog.csdn.net/weixin_41570890/article/details/108871861