1. Что такое Даббо?
Dubbo — это инфраструктура RPC с открытым исходным кодом от Alibaba.
Кратко поговорим об истории создания RPC-фреймворка.
Dubbo — это инфраструктура RPC, используемая в распределенных службах.
2. Интермодуляция Java с использованием Dubbo
Во-первых, мы можем попробовать вызвать Dubbo на том же ниже языке, начиная с простого.
Вы можете обратиться к официальной документации dubboХироши Ватанабэ.apache.org/this-capable/docs/…
Вот простая попытка, есть два основных шага:
-
Сначала установите поставщика услуг, то есть роль поставщика на приведенном выше рисунке;
-
Затем создайте потребителя службы, который также похож на роль потребителя на рисунке выше;
Поставщик услуг устанавливает поставщика
1.0 Использование весенней весенней загрузки построить микросервис(можно обратиться)С Чен Чжэнь.GitHub.IO/2018/08/24/…
**1.1. Создание интерфейса**
// TestProviderService.java
package com.dubbo.learn.dubbo;
public interface TestProviderService {
String Hello (String who);
}
1.2 Реализовать этот TestProviderServiceImpl
// TestProviderServiceImpl
package com.dubbo.learn.dubbo.impl;
import com.dubbo.learn.dubbo.TestProviderService;
import com.alibaba.dubbo.config.annotation.Service;
@Service(version="1.0.0")
public class TestProviderServiceImpl implements TestProviderService {
public String Hello(String who) {
return "Hello world ! Dear Programer " + who ;
}
}
1.3 Добавьте основную запись программы запуска@EnableDubbo
аннотация
// ProviderApplication.java
package com.dubbo.learn;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
Чтобы представить это@EnableDubbo
Аннотация, мы должны представитьcom.alibaba
упаковка
<!--pom.xml-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.5</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.11.1</version>
</dependency>
curator-framework
это центр сообщений, используемый dubboZookeeper
необходимые пакеты
dubbo-spring-boot-starter
Это пакет конфигурации dubbo spring
1.4 Наконец, мы записываем стартовую конфигурацию dubbo вapplication.properties
в
# application.properties
server.port = 8829
#
dubbo.application.name=provider
dubbo.registry.protocol=zookeeper
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.scan.base-packages=com.dubboo.learn
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.consumer.check=false
Вся структура проекта представлена на рисунке:
Затем просто запустите.
После запуска через веб-клиент dubbo Admin видно, что интерфейс Provider успешно зарегистрирован в реестре.
Потребитель услуг Потребитель
1.0 Используйте Spring Boot для создания потребительского микросервиса Spring
1.1 Определите интерфейс, где путь к интерфейсу и имя пакета должны совпадать (в противном случае вам придется настроить его самостоятельно)
// TestProviderService.java
package com.dubbo.learn.dubbo;
public interface TestProviderService {
String Hello (String who);
}
1.2 Определите службу для вызова интерфейса dubbo
// TestConsumerService.java
package com.dubbo.learn;
import com.alibaba.dubbo.config.annotation.Reference;
import com.dubbo.learn.dubbo.TestProviderService;
import org.springframework.stereotype.Component;
@Component
public class TestConsumerService {
@Reference(version = "1.0.0")
TestProviderService testProviderService;
public void consumer (String who) {
String res = testProviderService.Hello(who);
System.out.println("consumer : provider says " + res);
}
}
Вызов функции Сервиса в основной функции программы
// DubboConsumerApplication.java
package com.dubbo.learn;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import com.dubbo.learn.TestConsumerService;
@SpringBootApplication
public class DubboConsumerApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(DubboConsumerApplication.class, args);
TestConsumerService testConsumer = run.getBean(TestConsumerService.class);
testConsumer.consumer("White");
}
}
@Reference
Эта аннотация используется для вызова интерфейса, соответствующего dubbo. Так что также необходимо ввести эти пакеты с сервером
<!--pom.xml-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.5</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.11.1</version>
</dependency>
1.3 Наконец, мы записываем стартовую конфигурацию dubbo в application.properties
#application.properties
server.port=8830
dubbo.application.name=consumer
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.scan.base-packages=com.dubboo.learn.dubbo
dubbo.protocol.port=20880
Структура каталогов проекта выглядит следующим образом:
Эффект после запуска следующий:
3. Как Node.js вызывает Java через Dubbo
Сторона Node вызывает интерфейс Java-провайдера через dubbo, мы пробовали вызывать несколько пакетов: диван-rpc-node, node-zookeeper-dubbo и dubbo2.js.
Среди них диван-rpc-node более удобен для использования среды egg.js, а node-zookeeper-dubbo похож на диван-rpc-node, однако немного хлопотно, что оба пакета должны писать определения интерфейса proto3.
Да и dubbo2.js удобнее, ниже пример использования dubbo2.js
const { Dubbo, java, setting } = require('dubbo2.js')
const interfaceName = 'com.dubbo.learn.dubbo.TestProviderService'
const interfaceVersion = '1.0.0'
const dubboSetting = setting.match(
interfaceName, { version: interfaceVersion }
)
const dubboService = dubbo => dubbo.proxyService({
dubboInterface: interfaceName,
version: '1.0.0',
methods: {
Hello (who) {
return [
java.String(who)
]
}
}
})
const service = {dubboService}
// 实例化Dubbo, 入参主要是名称和 dubbo 接口的设置
const dubbo = new Dubbo({
application: {name: 'dubbo-node-test'},
register: '127.0.0.1:2181',
dubboSetting,
service
})
module.exports = dubbo
Код очень прост: зарегистрируйте интерфейс (включая имя интерфейса, информацию о версии интерфейса, метод интерфейса), предоставленный dubbo, в службе Java.
После получения экземпляра Dubbo вызовите соответствующий сервис для его использования.
следующее:
await dubbo.service.dubboService.Hello(who)
Мы просто написали интерфейс:
const KoaRouter = require('koa-router')
const dubbo = require('./dubbo')
const router = new KoaRouter({prefix: '/api/v1'})
router.use('/')
router.get('/testNodeDubbo', async (ctx, next) => {
console.info(`[testNodeDubbo]:==:> start`)
let {who} = ctx.request.query
const res = await dubbo.service.dubboService.Hello(who)
ctx.body = res
})
module.exports = router
Результат вызова:
Это завершает узел как потребитель для вызова интерфейса Java через dubbo.
4. Сравнение Node.js, вызывающего Java через интерфейс и вызывающего Java через Dubbo
Здесь мы пытаемся использовать интерфейсы dubbo и http, которые вызывают одну и ту же логику, и сравниваем время возврата двух реализаций.
Красный — интерфейс dubbo, синий — интерфейс http.
разное:
адрес проекта:
GitHub.com/с Чен Чжэнем/…
GitHub.com/с Чен Чжэнем/…
GitHub.com/с Чен Чжэнем/…