BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Apache Dubbo, um framework RPC baseado no Java é graduado como projeto Top-Level

Apache Dubbo, um framework RPC baseado no Java é graduado como projeto Top-Level

A Apache Software Foundation recentemente anunciou o Apache Dubbo como um projeto top-level. O Apache Dubbo é um framework RPC (remote procedure call) open source baseado em Java. Foi inicialmente desenvolvido no Alibaba, teve o código aberto em 2011, e entrou para o Apache Incubator em fevereiro de 2018. O Dubbo traz funcionalidades chave tais como chamada remota baseada em interface, tolerância a falhas e load balancing, e service registration e discovery automáticos.

Vamos dar uma olhada na arquitetura do Dubbo:

  1. O Container é responsável por inicializar, carregar e executar o serviço Provider.
  2. O Provider registra seus serviços para o Register durante a inicialização.
  3. O Consumer subscreve os serviços de que necessita do Register durante a inicialização.
  4. O Register retorna a lista de Providers para o Consumer, e quando uma alteração acontece, o Register envia os dados alterados para o Consumer.
  5. Com base no algoritmo de soft load balancing, o Consumer seleciona um dos Providers e executa a invocação, e quando uma falha acontece seleciona outro Provider automaticamente.
  6. Ambos Consumer e Provider vão contar o número de invocações e tempo de consumo em memória, e enviarão as estatísticas para o Monitor a cada minuto.

As funcionalidades do Apache Dubbo incluem:

  • Uma interface transparente baseada em RPC;
  • Load balancing inteligente, que suporta uma série de estratégias de load balancing;
  • Service registration and discovery automáticos;
  • Design de alta extensibilidade, micro-kernel e plug-in, o que garante fácil extensibilidade através de implementações de terceiros em todos os principais recursos, como protocolo, transporte e serialização;
  • Roteamento de tráfego em tempo de execução, que permite alterações na configuração em tempo de execução de maneira que o tráfego pode ser roteado de acordo com diferentes regras, facilitando o suporte a publicações do tipo blue-green deployment, etc;
  • Governança de serviço visualizada, que fornece ferramentas ricas para a governança e manutenção dos serviços tais como busca de metadados dos serviços, health status, e estatísticas.

Para começar a usar o Dubbo, primeiro adicione a dependência maven:

<dependencies>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.7.2<</version>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-dependencies-zookeeper</artifactId>
        <version>2.7.2<</version>
        <type>pom</type>
    </dependency>
</dependencies>

Agora, vamos definir uma interface de serviço e implementá-la no provider:

package org.apache.dubbo.samples.api;

//service interface
public interface GreetingService {
    String sayHello(String name);
}
 
//provider, implementation of service interface
public class GreetingServiceImpl implements GreetingService {
    @Override
    public String sayHello(String name) {
        return "Hello " + name;
    }
}

Agora vamos configurar o provider:

package org.apache.dubbo.demo.provider;

import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;
import org.apache.dubbo.samples.api.GreetingService;
import java.io.IOException;
 
public class Application {

    public static void main(String[] args) throws IOException {
        ServiceConfig serviceConfig = new ServiceConfig();
        serviceConfig.setApplication(new ApplicationConfig("first-dubbo-provider"));
        serviceConfig.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
        serviceConfig.setInterface(GreetingService.class);
        serviceConfig.setRef(new GreetingServiceImpl());
        serviceConfig.export();
        System.in.read();
    }
}

Então construir e executar:

# mvn clean package
# mvn -Djava.net.preferIPv4Stack=true -Dexec.mainClass=org.apache.dubbo.demo.provider.Application exec:java

O trecho de código a seguir demonstra como criar um consumer:

package org.apache.dubbo.demo.consumer;

import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.samples.api.GreetingService;

public class Application {
    public static void main(String[] args) {
        ReferenceConfig referenceConfig = new ReferenceConfig();
        referenceConfig.setApplication(new ApplicationConfig("first-dubbo-consumer"));
        referenceConfig.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
        referenceConfig.setInterface(GreetingService.class);
        GreetingService greetingService = referenceConfig.get();
        System.out.println(greetingService.sayHello("world"));
    }
}

Iniciar um novo projeto usando o Dubbo é muito simples; é possível iniciar da maneira que fizemos acima, ou através do Dubbo Spring initializr, que é basicamente um fork do Spring initializr. Além disso, além do Java, o Dubbo suporta Node.js, Python, e PHP.

Empresas como Alibaba Group, China Life, China Telecom, Dangdang, Didi Chuxing, Haier, Industrial and Commercial Bank of China, NetEase, Qunar, e Youzan estão usando o Apache Dubbo.

Maiores detalhes sobre o Dubbo podem ser encontrados em https://dubbo.apache.org. Desenvolvedores que quiserem contribuir devem acessar o contributor guide. Há também uma documentação disponível.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT