Jadual Kandungan
Prinsip RPC
造轮子
框架使用" >框架使用
Rumah masalah biasa Rangka kerja RPC tulisan tangan sebenarnya bukan hanya untuk berpura-pura menjadi 13!

Rangka kerja RPC tulisan tangan sebenarnya bukan hanya untuk berpura-pura menjadi 13!

Aug 16, 2023 pm 05:01 PM
rangka kerja rpc

Dalam temuduga, senang ditanya oleh penemuduga:

Bagaimana untuk mereka bentuk rangka kerja RPC?

Anda mungkin belum ditanya, mungkin anda bertuah, atau mungkin anda belum berada di tahap ini. Biasanya gaji bulanan lebih daripada 20k, dan pada dasarnya mereka akan bertanya beberapa soalan reka bentuk.

Dari perspektif penemuduga: Menanyakan soalan jenis ini adalah lebih baik daripada bertanya esei lapan bahagian, yang melibatkan banyak perkara teknikal. Contohnya: pengetahuan tentang corak reka bentuk, protokol komunikasi, ejen dinamik, virtualisasi, kumpulan benang, dsb.

Baiklah, jangan terlalu jauh, mari kita mula bercakap tentang topik hari ini.

RPC ialah panggilan prosedur Jauh mungkin ramai yang tidak memahami perkataan ini secara ringkas:

Panggil perkhidmatan jauh seperti memanggil kaedah tempatan.

Sebagai contoh, kes berikut: perkhidmatan pengendalian pengguna:

public interface UserService{
    String findUserNameById(Integer userId);
}
@Service
public class UserServiceImpl implements UserService{
    String findUserNameById(Integer userId){
        //查数据或查缓存获取到用户名
        return "田哥"
    }
}
Salin selepas log masuk

Kini pengawal ingin memanggil kaedah findUserNameById UserServiceImpl untuk mendapatkan nama pengguna.

@RestController
public class UserController{
    @Resource
    private UserService userService;
    
    @GetMapping("/test")
    public String test(){
        return userService.findUserNameById(1);
    }
}
Salin selepas log masuk

Dengan mengandaikan bahawa tiga kelas UserController, UserServiceImpl dan UserService semuanya berada dalam projek yang sama, adalah sangat mudah untuk pengawal memanggil kaedah findUserNameById.

Namun, jika controller adalah projek lain dan ingin dipanggil seperti di atas (perbezaan halus, perasaan masih sama), maka kita boleh menggunakan rangka kerja RPC.

1 Antara muka UserService perlu diletakkan dalam projek berasingan, yang biasanya kami panggil projek api.

2. UserServiceImpl perlu diletakkan dalam projek berasingan, yang biasanya kami panggil projek pembekal.

3. Pengawal, melalui web dan projek (pengguna) lain

4 Jadikan API ke dalam pakej balang, dan kemudian rujuknya dalam kedua-dua projek pengguna dan projek pembekal.

Rangka kerja RPC di pasaran, seperti Dubbo (Alibaba), Jimat (FaceBook), gRpc (Google), brpc (Baidu), dll., semuanya memfokuskan pada aspek yang berbeza untuk menyelesaikan tujuan asal sangat sempurna, dan ada yang ingin mencapai kesempurnaan, manakala yang lain lebih suka kesederhanaan yang melampau.

Prinsip RPC

Berbalik kepada apa yang kami katakan tadiPanggil perkhidmatan jauh seperti panggilan tempatan, apakah sokongan teknikal yang diperlukan?

  • Proksi dinamik, kerana projek pengguna kami hanya mempunyai antara muka UserService takrifan dan tiada kelas pelaksanaan Ingin memanggil kaedah antara muka? Kemudian anda hanya boleh membuat objek proksi. .
  • Komunikasi rangkaian, proses silang pasti akan melibatkan komunikasi rangkaian.
  • Protokol penghantaran rangkaian, pengguna dan pembekal Mesti ada standard untuk maklumat parameter berulang-alik Bagaimana anda menyampaikannya kepada saya? .
  • Pusat Pendaftaran, jika penyedia melakukan penempatan kluster (perkhidmatan yang sama digunakan pada berbilang mesin), maka kita perlu melakukan penyelenggaraan manual pada pengguna Jika volum meningkat, beban kerja boleh dibayangkan. .
  • Penghalaan dinamik
  • , jika penyedia digunakan dalam kelompok (perkhidmatan yang sama digunakan pada berbilang mesin), kami tidak boleh membiarkan pengguna jatuh pada nod yang sama, supaya sumber tidak dapat digunakan sepenuhnya, dan
  • hujan dan embun maharaja purba akan dikongsi sama
    . Penghalaan dinamik melibatkan pelbagai algoritma, seperti rawak, pengundian, pemberatan, dsb.
  • Mengapa perlu pusat pendaftaran saya telah kongsikan sebelum ini:
  • Temuduga Meituan: Bagaimana untuk mereka bentuk pusat pendaftaran?
  • 造轮子

    根据上面的这些原理,田哥也搞了一个RPC框架,命名为mink(一个动物的名称)。

    --mink
    ----mink-rpc rpc基本功能
    ----mink-registry 服务注册与发现
    ----mink-spring 集成SpringBoot
    Salin selepas log masuk

    然后,我们把mink-spring打成jar包,服务发布和服务引用都把这个jar给依赖进去。

    Rangka kerja RPC tulisan tangan sebenarnya bukan hanya untuk berpura-pura menjadi 13!

    Rangka kerja RPC tulisan tangan sebenarnya bukan hanya untuk berpura-pura menjadi 13!

    Rangka kerja RPC tulisan tangan sebenarnya bukan hanya untuk berpura-pura menjadi 13!


    框架使用

    上面,我们创造了轮子,下面,我们就来看如何使用。

    Rangka kerja RPC tulisan tangan sebenarnya bukan hanya untuk berpura-pura menjadi 13!

    mink-demo就是一个Spring Boot项目,有三个module。

    Rangka kerja RPC tulisan tangan sebenarnya bukan hanya untuk berpura-pura menjadi 13!


    我们把mink-api打成jar包,共consumer和provider使用。

    也就是我们在consumer和provider都引入:

    <dependency>
        <groupId>com.tian</groupId>
        <artifactId>mink-api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    Salin selepas log masuk

    下面,我们来看看provider端的代码:

    <dependency>
       <groupId>com.tian</groupId>
       <artifactId>mink-spring</artifactId>
       <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
       <groupId>com.tian</groupId>
       <artifactId>mink-api</artifactId>
       <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter</artifactId>
       <version>2.5.4</version>
    </dependency>
    Salin selepas log masuk

    我们的mink框架,只需要引入mink-spring依赖即可。

    接着就是properties的配置:

    mink.rpc.servicePort=20880
    mink.rpc.registryType=0
    mink.rpc.registryAddress=127.0.0.1:2181
    Salin selepas log masuk

    再来看看具体服务实现类:

    package com.tian.service;
    
    import com.tian.annotation.MinkService;
    
    /**
     * @author tianwc  公众号:java后端技术全栈、面试专栏
     * @version 1.0.0
     * @description 用户服务
     * @createTime 2022年08月23日 18:16
     */
    @MinkService
    public class UserServiceImpl implements UserService {
        @Override
        public String findUserNameByiD(Integer id) {
            System.out.println("服务调用");
            return "tian";
        }
    }
    Salin selepas log masuk

    这一步,我们只需要在实现类上加上注解@MinkService即可。

    最后就是项目启动类:

    @ComponentScan(basePackages = {"com.tian.service","com.tian"})
    @SpringBootApplication
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    Salin selepas log masuk

    我们启动项目(注册中心用的是zookeeper):

    Rangka kerja RPC tulisan tangan sebenarnya bukan hanya untuk berpura-pura menjadi 13!


    从日志中可以看出,我们的服务已经成功注册到注册中心了。

    下面,我们来看看consumer端代码。

    首先来看看依赖:

    <dependency>
       <groupId>com.tian</groupId>
       <artifactId>mink-spring</artifactId>
       <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
       <groupId>com.tian</groupId>
       <artifactId>mink-api</artifactId>
       <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter</artifactId>
       <version>2.5.4</version>
    </dependency>
    
       org.springframework.boot
       spring-boot-starter-web
       2.5.4
    
    Salin selepas log masuk

    这依赖也很简单,没什么好说的。

    再来看看properties配置项:

    mink.rpc.registryType=0
    mink.rpc.registryAddress=127.0.0.1:2181
    
    server.port=8090
    Salin selepas log masuk

    是不是也很简单?

    再来看看我们的controller代码:

    package com.tian.controller;
    
    import com.tian.annotation.MinkReference;
    import com.tian.service.UserService;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author tianwc  公众号:java后端技术全栈、面试专栏
     * @version 1.0.0
     * @description 消费端
     * @createTime 2022年08月23日 23:08
     */
    @RestController
    public class UserController {
    
        @MinkReference
        private UserService userService;
    
        @RequestMapping("/test")
        public String test() {
            return userService.findUserNameByiD(1);
        }
    }
    Salin selepas log masuk

    需要用到对应服务,只需要添加注解@MinkReference即可。

    最后就是项目启动类,简单的不行。

    @SpringBootApplication
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    Salin selepas log masuk

    启动日志:

    Rangka kerja RPC tulisan tangan sebenarnya bukan hanya untuk berpura-pura menjadi 13!

    访问:http://localhost:8090/test

    Rangka kerja RPC tulisan tangan sebenarnya bukan hanya untuk berpura-pura menjadi 13!

    成功!整个过程,非常轻松地集成mink框架并在业务代码中使用。

    总结起来,其实就三步:

    1、pom中添加依赖

    2、properties文件中配置注册中心信息

    3、使用的时候加上注解@MinkReference@MinkService即可

Atas ialah kandungan terperinci Rangka kerja RPC tulisan tangan sebenarnya bukan hanya untuk berpura-pura menjadi 13!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Rangka kerja RPC tulisan tangan sebenarnya bukan hanya untuk berpura-pura menjadi 13! Rangka kerja RPC tulisan tangan sebenarnya bukan hanya untuk berpura-pura menjadi 13! Aug 16, 2023 pm 05:01 PM

Anda mungkin belum ditanya, mungkin anda bertuah, atau mungkin anda belum berada di tahap ini. Biasanya gaji bulanan lebih daripada 20k, dan pada dasarnya mereka akan bertanya beberapa soalan reka bentuk. Dari perspektif penemuduga: Menyoal jenis soalan ini adalah lebih baik daripada menulis esei lapan bahagian, yang melibatkan banyak perkara teknikal. Contohnya: pengetahuan tentang corak reka bentuk, protokol komunikasi, ejen dinamik, virtualisasi, kumpulan benang, dsb.

Penemuduga Alibaba: Sila tulis tangan rangka kerja RPC untuk saya. Penemuduga Alibaba: Sila tulis tangan rangka kerja RPC untuk saya. Aug 17, 2023 pm 04:24 PM

RPC ialah protokol komunikasi komputer. Protokol ini membenarkan program yang dijalankan pada satu komputer untuk memanggil subrutin pada komputer lain tanpa pembangun perlu memprogramkan interaksi ini secara tambahan.

Prinsip dan aplikasi rangka kerja RPC dalam bahasa Go Prinsip dan aplikasi rangka kerja RPC dalam bahasa Go Jun 01, 2023 pm 03:01 PM

1. Konsep rangka kerja RPC Dalam sistem teragih, data selalunya perlu dipindahkan antara pelayan dan pelanggan yang berbeza Rangka kerja RPC (RemoteProcedureCall) ialah cara teknikal yang biasa digunakan. Rangka kerja RPC membenarkan aplikasi memanggil fungsi atau kaedah persekitaran pelaksanaan lain melalui pemesejan jauh, dengan itu membolehkan program berjalan pada komputer yang berbeza. Pada masa ini terdapat banyak rangka kerja RPC di pasaran, seperti gRPC Google, Thrift, Hessian, dll. Artikel ini terutamanya memperkenalkan

Bagaimana untuk membangunkan rangka kerja RPC dalam PHP? Bagaimana untuk membangunkan rangka kerja RPC dalam PHP? May 13, 2023 pm 03:22 PM

RPC (RemoteProcedureCall) ialah protokol komunikasi antara proses yang membenarkan proses yang berbeza untuk berkomunikasi dan bekerjasama melalui rangkaian pada mesin fizikal yang berbeza. Rangka kerja RPC semakin menarik perhatian kerana ia dapat membantu pembangun dengan mudah melaksanakan pembangunan sistem teragih. Dalam artikel ini, kami akan memperkenalkan langkah demi langkah cara menggunakan PHP untuk membangunkan rangka kerja RPC. 1. Apakah rangka kerja RPC? Rangka kerja RPC ialah rangka kerja yang digunakan untuk melaksanakan panggilan prosedur jauh. Dalam berasaskan RPC

Apakah rangka kerja rpc yang ada? Apakah rangka kerja rpc yang ada? Aug 03, 2023 am 10:17 AM

Rangka kerja rpc termasuk: 1. gRPC, rangka kerja RPC sumber terbuka berprestasi tinggi yang dibangunkan oleh Google 2. Apache Thrift, rangka kerja RPC merentas bahasa yang dibangunkan dan sumber terbuka oleh Facebook; prestasi, rangka kerja RPC yang ringan, sesuai untuk sistem teragih berskala besar;

Penilaian rangka kerja RPC bahasa Go: prestasi, kemudahan penggunaan, perbandingan sokongan komuniti Penilaian rangka kerja RPC bahasa Go: prestasi, kemudahan penggunaan, perbandingan sokongan komuniti Feb 27, 2024 pm 09:12 PM

Sebagai bahasa pengaturcaraan moden yang penting, bahasa Go semakin digunakan dalam pembangunan sistem teragih. Apabila membina sistem teragih, pilihan rangka kerja RPC (panggilan prosedur jauh) selalunya penting. Artikel ini akan menjalankan penilaian mendatar bagi rangka kerja RPC bahasa Go semasa, membandingkan kelebihan dan kekurangannya dari segi prestasi, kemudahan penggunaan dan sokongan komuniti, serta melampirkan contoh kod khusus. 1. Perbandingan prestasi Dalam sistem teragih, prestasi selalunya merupakan salah satu petunjuk utama yang diberi perhatian oleh pembangun. Berikut adalah beberapa yang utama

Cara melaksanakan rangka kerja RPC konkurensi tinggi dalam bahasa go Cara melaksanakan rangka kerja RPC konkurensi tinggi dalam bahasa go Aug 05, 2023 pm 12:49 PM

Pengenalan kepada cara melaksanakan rangka kerja RPC konkurensi tinggi dalam bahasa Go: Dengan perkembangan pesat Internet, aplikasi konkurensi tinggi telah menarik lebih banyak perhatian. Menggunakan rangka kerja RPC (RemoteProcedureCall) ialah penyelesaian biasa. Artikel ini akan memperkenalkan cara melaksanakan rangka kerja RPC konkurensi tinggi dalam bahasa Go dan akan disertakan dengan contoh kod. Pengenalan kepada rangka kerja RPC: RPC ialah protokol komunikasi yang membenarkan atur cara komputer memanggil subrutin dalam ruang alamat lain (biasanya terletak pada komputer jauh) tanpa

Apakah rangka kerja RPC dalam PHP7.0? Apakah rangka kerja RPC dalam PHP7.0? May 29, 2023 am 11:10 AM

Dengan perkembangan teknologi komputer yang berterusan, sistem teragih telah menjadi arus perdana, dan panggilan prosedur jauh (RPC) merupakan cara penting untuk melaksanakan sistem teragih. Sebagai bahasa pengaturcaraan Web yang popular, PHP juga mempunyai rangka kerja RPC sendiri, antaranya beberapa rangka kerja RPC baharu telah diperkenalkan dalam versi PHP7.0. Artikel ini akan memperkenalkan rangka kerja RPC biasa dan ciri-cirinya dalam PHP7.0. PHPRemoteProcedureCall(phpRPC)phpRPC ialah RP yang ringan