调整Dubbo微服务的超期时间 dubbo实现微服务

admin2024-05-30  17

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基本原理:

调整Dubbo微服务的超期时间 dubbo实现微服务,调整Dubbo微服务的超期时间 dubbo实现微服务_java,第1张

步骤解析:

调整Dubbo微服务的超期时间 dubbo实现微服务,调整Dubbo微服务的超期时间 dubbo实现微服务_RPC_02,第2张

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

代码实现

环境准备

  1. 启动zookeeper !
  2. 在IDEA创建一个空模块
  3. 环境所需依赖的Jar包
<!--            公共接口包  -->
        <dependency>
            <groupId>com.liang</groupId>
            <artifactId>com.liang</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--            dubbo场景启动器-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
<!--                    开源的Zookeeper客户端-->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

        <!-- 引入zookeeper -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <!--排除这个slf4j-log4j12-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

公共接口模块

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!