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

【分布式入门】Dubbo

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

【分布式入门】Dubbo

什么是Dubbo

在分布式系统中,一个核心部分是远程方法调用,既然有远程方法调用则必须进行远程通信,而Dubbo就是为了解决通信问题而诞生的,这里引用官方的描述:Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。

什么是RPC

说白了RPC就是一种通信方式,他的目的是使一台计算机可以远程调用另一台计算机上的方法
简述一下RPC的工作流程
1.客户端调用client sub传入参数
2.客户端把参数转为序列化消息
3.将消息发送给服务端
4.服务端将数据传给server sub
5.server sub解析数据
6.server sub调用服务端方法,并将结果返回客户端
如果想详细的了解可以参阅在这篇文章:RPC是什么,看完你就知道了

注册中心

注册中心有很多种,这里面dubbo中最推荐的是zookeeper注册中心

zookeeper安装

前提:安装jdk并配置好java_home环境变量
zookeeper下载链接
1.下载zooleeper

2.解压文件,打开bin文件夹,打开cmd 运行bin文件夹中的zkServer.cmd
这时可能会出现闪退,通过报错信息来判断,如果报错信息如下

检查conf目录下是否有zoo.cfg文件 若没有则复制zoo_sample.cfg并重命名为zoo.cfg
再次运行zkServer.cmd提示如下信息则表示启动成功

3.使用zkCli.cmd验证
这时候我们就可以执行zkCli.cmd 执行完毕后显示如下代表执行成功

使用ls /命令可以查看当前存在的键值对
使用create -e /test 123456命令可以创建key为test value为123456的键值对
至此Dubbo安装成功

Dubbo-admin

dubbo-admin是一个监控管理后台,其作用类似于phpmyadmin。
dubbo-admin主页
dubbo-admin发行版
使用方法:运行注册中心的服务端之后运行dubbo-admin发行版下bin目录下的启动脚本即可
可能遇到的问题:
1:

运行zeekeeper服务端即可解决
2:8080端口被占用,zookeeper部署后, 3.5以后的版本, 会自动占用8080端口. 需要修改配置文件
我们只需要修改conf/zoo.cfg文件添加 admin.serverPort=8887,之后重新运行zookeeper即可

创建服务–providerServer 准备

创建一个speringBoot项目并添加web模块 起名providerService

依赖:
        
            org.apache.dubbo
            dubbo-spring-boot-starter
            3.0.10
        

		
			com.github.sgroschupf
			zkclient
			0.1
		
		
		
			org.apache.zookeeper
			zookeeper
			3.8.0
		

		
		
			org.apache.curator
			curator-framework
			5.2.1
		
		
			org.apache.curator
			curator-recipes
			5.2.1
		
		
			org.apache.curator
			curator-x-discovery
			5.2.1
		
创建并实现接口

创建接口

package com.example.providerserver.service;

public interface TicketService {
    public String getTick();
}

实现接口

package com.example.providerserver.service.impl;
import com.example.providerserver.service.TicketService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Service;

//zookeeper 服务注册与发现

@DubboService   //可以被扫描到
@Service
public class TickserviceImpl implements TicketService{

    @Override
    public String getTick() {
        return "hello tickservice";
    }
}

配置文件
server.port=8081
#配置应用名
dubbo.application.name=providerService
#当前注册中心的访问地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#要扫描注解的包
dubbo.scan.base-packages=com.example.providerserver.service
# 防止端口冲突
dubbo.protocol.port=20881
运行

先运行zookeeper 再运行本程序及dubbo-admin 在dubbo-admin中可以查看自己创建的服务

创建消费者-consumerServer

当一个服务器需要调用远程的服务时可以通过以下方式来完成

准备

创建springboot项目

依赖

依赖方面与providerServer一致

配置文件

只需要简单配置应用名和注册中心地址即可

server.port=8082
#应用名
dubbo.application.name=consumerServer
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
创建远程调用包名

为保证本地调用不会报错,需要创建所需服务的全类名路径


并按远程服务的方法写好对应接口

创建消费者service
package com.example.consumerserver.service;

import com.example.providerserver.service.TicketService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @DubboReference
    TicketService ticketService;

    public void getTicket(){
        System.out.println("取到票=》"+ticketService.getTick());
    }

}

这里重要的就是DubboReference注解它可以远程引用dubbo服务

测试

在test中测试

package com.example.consumerserver;

import com.example.consumerserver.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ConsumerServerApplicationTests {

    @Autowired
    UserService userService;

    @Test
    void contextLoads() {
        userService.getTicket();
    }

}

先启动zookeeper和提供者服务
再运行测试函数
可以看到控制台输出:

至此,demo搭建完毕

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

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

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