Um exemplo simples do princípio da implementação do serviço rpc

No desenvolvimento normal, geralmente usamos a estrutura rpc ao fazer projetos distribuídos para realizar a arquitetura de microsserviço. Agora, a empresa usa muitos frameworks como o dubbo. Esses frameworks de código aberto são frameworks que integram muitas funções complexas. Este artigo implementa o exemplo de serviço rpc mais simples para ilustrar brevemente a ideia básica da implementação rpc.

O código-fonte foi colocado no github:  https://github.com/readreamer23/RpcFrameDemo

1. Classe de quadro principal
Encapsule serviços expostos e métodos de serviço de referência para provedores de serviços e consumidores chamarem
Nome da classe: RpcFrame.java


package com.rpc;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * rpc简单框架实现
 * 定义provider暴露服务方法和consumer引用服务方法
 *
 */
public class RpcFrame {

    /**
     * 暴露服务--服务提供者用
     *
     * @param service 服务实现
     * @param port    服务端口
     * @throws Exception
     */
    public static void export(final Object service, int port) throws Exception {
        if (service == null)
            throw new IllegalArgumentException("service instance == null");
        if (port <= 0 || port > 65535)
            throw new IllegalArgumentException("无效端口:" + port);
        System.out.println("provider服务暴露service= " + service.getClass().getName() + ", 端口 " + port);
        ServerSocket server = new ServerSocket(port);
        for (; ; ) {
            try {
                final Socket socket = server.accept();
                new Thread(new Runnable() {

                    //@Override
                    public void run() {
                        try {
                            try {
                                ObjectInputStream input = new ObjectInputStream(socket.getI

Acho que você gosta

Origin blog.csdn.net/dreamer23/article/details/100602459
Recomendado
Clasificación