Dubbo+zookeeper分布式框架实战

一、zookeeper

1.Zookeeper介绍

https://blog.csdn.net/Z_Vivian/article/details/102562919

2.Zookeeper服务端集群搭建

https://blog.csdn.net/Z_Vivian/article/details/101291716

二、Dubbo

1.Dubbo介绍

Dubbo是一个远程服务调用的分布式框架,力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
其核心部分包含:
1.远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
2.集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
3.自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

2.Dubbo配置及使用

Dubbo管理台

Dubbo管理台看自己是否需要可视化管理(可有可无)
dubbo 2.5.6 源码地址:
https://codeload.github.com/apache/dubbo/zip/dubbo-2.5.6
将dubbo-admin用idea打开
在这里插入图片描述
将WEB-INF/dubbo.properties的zookeeper地址改成自己的。然后配置tomcat将项目跑起来
在这里插入图片描述
在浏览器访问:http://localhost:8080/governance/services出现登录界(部署在服务器访问http://ip:8080/dubbo-admin-2.5.6/governance/applications)

在这里插入图片描述
面输入用户名:guest 密码:guest 如下登录成功
在这里插入图片描述

提供者:

项目结构图如下:
在这里插入图片描述
①配置pom.xml文件,添加dubbo依赖。

        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.13</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.11</version>
        </dependency>

②配置application.properties文件

server.port=8081
#配置dubbo的id和name 这个是为了在monitor里面区分不同应用的
spring.dubbo.application.name=dubbo-provider
spring.dubbo.application.id=dubbo-provider
spring.dubbo.registry.address=zookeeper://123.207.231.159:2181
spring.dubbo.provider.timeout=20000

③启动类:DoubleProviderApplication添加@EnableDubboConfiguration注解。

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubboConfiguration
public class DubboProviderApplication {

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

④接口类:UserServer.java(与消费者接口路径必须保持一致)

public interface UserServer {
    String login(String username,String password);
}

⑤实现类:IUserServer.java实现UserServer 接口模拟登陆。

import com.alibaba.dubbo.config.annotation.Service;
import com.zzx.server.UserServer;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

@Component
@Service(interfaceClass = UserServer.class)
public class IUserServer implements UserServer {

    @Override
    public String login(String username, String password) {
        if(StringUtils.isEmpty(username)&&StringUtils.isEmpty(password)){
            return "账号或密码不能为空!";
        }
        if(username.equals("admin")&&password.equals("admin")){
            return "登录成功";
        }
        return "登录失败";
    }
}

消费者:

项目结构图如下:
在这里插入图片描述
①配置pom.xml文件,添加dubbo依赖。

        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.13</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.11</version>
        </dependency>

②配置application.properties文件

server.port=8082
spring.dubbo.application.name=dubbo-consumer
spring.dubbo.application.id=dubbo-consumer
spring.dubbo.registry.address=zookeeper://123.207.231.159:2181
#远程服务调用超时
spring.dubbo.consumer.timeout=10000
#启动时检查提供者是否存在,true报错,false忽略
spring.dubbo.consumer.check=false

③启动类:DubboConsumerApplication添加@EnableDubboConfiguration注解

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubboConfiguration
public class DubboConsumerApplication {

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

④接口类:UserServer.java(与提供者接口路径必须相同)

public interface UserServer {
    String login(String username,String password);
}

⑤服务层:IUserServer.java

import com.alibaba.dubbo.config.annotation.Reference;
import com.zzx.server.UserServer;
import org.springframework.stereotype.Component;

@Component
public class IUserServer {

    @Reference
    UserServer userServer;

    public String login(String username,String password){
        return userServer.login(username, password);
    }
}

⑤控制器:UserConsumer

import com.zzx.server.imp.IUserServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserConsumer {
    
    @Autowired
    IUserServer userServer;

    @PostMapping("/login")
    public String login(String username,String password){
        return userServer.login(username, password);
    }
}

三、测试

浏览器继续访问:http://localhost:8080/governance/services 如下已经可以看到服务了。
在这里插入图片描述
在postman输入地址:localhost:8082,设置Post请求,设置请求参数,如下图。返发送请求测试成功!在这里插入图片描述

发布了55 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Z_Vivian/article/details/102977866