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

springboot-23-整合dubbo

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

springboot-23-整合dubbo

Dubbo简介

    Apache Dubbo是一款微服务开发框架,提供RPC通信和微服务治理功能两大关键能力。使用了Dubbo开发的微服务,将具备相互之间的远程发现和通信能力,同时利用Dubbo提供的丰富服务治理能力,可以实现诸如服务发现,负载均衡,流量调度等服务治理诉求,

    Dubbo提供了从服务定义、服务发现、服务通信到流量管控等几乎所有的服务治理能力,并且尝试从使用上对用户屏蔽底层细节,以提供更好的易用性。

    Dubbo中所提到的服务,通常是指RPC粒度的,提供某个具体业务增删改功能的接口和方法。

1.服务定义

    定义服务在Dubbo中简单且直观,使用某种语言绑定的方式(如Java中可直接定义Interface),也可以使用Protobuf IDL语言中立的方式。

2.服务通信

    点对点的服务通信是Dubbo提供的另一种基本能力,Dubbo以RPC的方式将请求数据(Request)发送给后端服务,并接收服务端返回的计算结果。RPC 通信对用户来说是完全透明的,使用者无需关心请求是如何发出去的、发到了哪里,每次调用只需要拿到正确的调用结果就行。

3.服务发现

    让微服务组件之间可以独立演进并任意部署,消费端可以在无需感知对端部署位置与 IP 地址的情况下完成通信。Dubbo 提供的是 Client-Based 的服务发现机制。

  • 使用独立的注册中心组件,如 Nacos、Zookeeper、Consul、Etcd 等。
  • 将服务的组织与注册交给底层容器平台,如 Kubernetes,这被理解是一种更云原生的方式
4.流量管控

Dubbo 提供了包括负载均衡、流量路由、请求超时、流量降级、重试等策略,基于这些基础能力可以轻松的实现更多场景化的路由方案,包括金丝雀发布、A/B测试、权重路由、同区域优先等,更酷的是,Dubbo 支持流控策略在运行态动态生效,无需重新部署。

RPC简介

    RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。

    也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。为什么要用RPC呢?就是无法在一个进程内,甚至一个计算机内通过本地调用的方式完成的需求,比如不同的系统间的通讯,甚至不同的组织间的通讯,由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用。RPC就是要像调用本地的函数一样去调远程函数;

RPC基本原理:

步骤解析:


RPC的核心模块:通讯,序列化。

代码实现 环境准备
  1. 启动zookeeper !
  2. 在IDEA创建一个空模块
  3. 环境所需依赖的Jar包

        
            com.liang
            com.liang
            1.0-SNAPSHOT
        
        
        
            org.apache.dubbo
            dubbo-spring-boot-starter
            2.7.3
        

        
            com.github.sgroschupf
            zkclient
            0.1
        

        
        
            org.apache.curator
            curator-framework
            2.12.0
        
        
            org.apache.curator
            curator-recipes
            2.12.0
        

        
            org.apache.zookeeper
            zookeeper
            3.4.14
            
            
                
                    org.slf4j
                    slf4j-log4j12
                
            
        
公共接口模块
  1. 添加一个名叫dubbo-api的maven项目
    在类路径下org.liang.service包下创建一个 Ticketservice接口,代码如下
package org.liang.service;


public interface TicketService {
    String sayHello();
}

写完后记得安装(maven install),这里不需要导入依赖jar包

服务提供者模块

1.添加一个名叫dubbo-provider的项目,选择web模块即可

2.在pom.xml导入上面所说的依赖jar包

3.在类路径下com.liang.provider.service包下创建TicketService接口实现类,代码如下:

package com.liang.provider.service;

import org.apache.dubbo.config.annotation.Service;
import org.liang.service.TicketService;
import org.springframework.stereotype.Component;

@Service
@Component
public class TicketServiceImpl implements TicketService {

    @Override
    public String sayHello() {
        return "hello,dubbo";
    }
}

  1. 编写服务提供者的配置,在全局配置文件中添加:
# 应用名称
spring.application.name=dubbo-provider
# 应用服务 WEB 访问端口
server.port=8081

# 注册中心
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 配置dubbo扫描路径
dubbo.scan.base-packages=com.liang.provider.service
# 配置dubbo
dubbo.protocol.name=dubbo
dubbo.protocol.port=20080
# 连接日志
dubbo.protocol.accesslog=true
服务消费者模块

1.添加一个名叫dubbo-consumer的项目,选择web模块即可

2.在pom.xml导入上面所说的依赖jar包

3.在类路径下com.liang.consumer.controller包下创建TicketSController控制层类,代码如下:

@EnableDubbo
@Controller
public class TicketController {
    @Reference
    TicketService ticketService;

    @RequestMapping("/hello")
    @ResponseBody
    public String  hello()
    {
        return ticketService.sayHello();
    }
}

  1. 编写服务消费者的配置,在全局配置文件中添加:
# 应用名称
spring.application.name=dubbo-consumer
# 应用服务 WEB 访问端口
server.port=8080


# 注册中心配置

dubbo.registry.address=zookeeper://127.0.0.1:2181

# 包扫描

dubbo.scan.base-packages=com.liang.consumer.controller

# dubbo配置
dubbo.protocol.name=dubbo
dubbo.protocol.host=127.0.0.1
测试

先启动服务提供者,再启动服务消费者

测试结果

  1. 打开dubbo admin查看是否有服务添加
  2. 看是否能取到服务
    输入localhost:8080/hello

    可以访问到,说明dubbo已经实现了定义,发现,通信。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862753.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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