springboot-23-整合dubbo

springboot-23-整合dubbo,第1张

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已经实现了定义,发现,通信。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/871359.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存