Давным-давно, когда я впервые начал базовый курс Spring Cloud, я написал такую статью:Выбор базовой платформы для микросервисной архитектуры: Spring Cloud или Dubbo? 》, и наверняка многие читатели тоже его видели. С тех пор были вопросы о том, как выбрать эти два фреймворка.На самом деле, я четко упомянул в статье, что сравнение между Spring Cloud и самим Dubbo несправедливо, в основном первый представляет собой относительно полный набор архитектурных решений, в то время как Dubbo Это просто схема управления службами и реализации RPC.
Поскольку у Dubbo очень большая группа пользователей в Китае, окружающие его объекты и компоненты относительно несовершенны. Многие разработчики и пользователи также хотят насладиться экологией Spring Cloud, поэтому будут некоторые случаи и методы совместного использования Spring Cloud и Dubbo, но большинство решений по использованию Spring Cloud, интегрирующих Dubbo, всегда были неудобными. В основном это связано с тем, что реестр Dubbod использует ZooKeeper, а реестр в системе Spring Cloud вначале не поддерживает ZooKeeper, поэтому во многих решениях есть два разных реестра.После этого, хотя Spring Cloud поддерживает ZooKeeper, из-за сервис Детализация информации также несовместима с хранением. Поэтому в течение долгого времени на уровне управления услугами всегда существовала идеальная схема интеграции.
Только с появлением Spring Cloud Alibaba такая проблема могла быть решена. В предыдущем руководстве мы представили использование Nacos в Spring Cloud Alibaba в качестве реестра сервисов, и в рамках этого Ribbon или Feign можно использовать для обеспечения потребления сервисов, как в традиционных приложениях Spring Cloud. В этой статье продолжим рассказывать о дополнительно поддерживаемом решении RPC в рамках Spring Cloud Alibaba: Dubbo.
Начиная
Давайте сначала воспользуемся простым примером, чтобы интуитивно познакомиться с реестром сервисов Nacos и использовать Dubbo для реализации поставщиков и потребителей сервисов. Установка и использование Nacos здесь опущены.Если вы мало знаете о Nacos, вы можете проверить эту серию статей.Используйте Nacos для регистрации и обнаружения служб, и непосредственно введите шаги использования Dubbo.
Построить сервисный интерфейс
Создайте простой проект Java и определите абстрактный интерфейс ниже, например:
public interface HelloService {
String hello(String name);
}
Создание поставщиков интерфейсов сервисов
первый шаг: Создайте проект Spring Boot вpom.xml
Представьте пакет API, созданный на первом этапе, и зависимость Spring Cloud Alibaba от Nacos и Dubbo, например:
<dependencies>
<!-- 第一步中构建的API包 -->
<dependency>
<groupId>com.didispace</groupId>
<artifactId>alibaba-dubbo-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<!--<groupId>com.alibaba.cloud</groupId>-->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
//...
</dependencies>
Здесь следует отметить две вещи:
- Должен содержать
spring-boot-starter-actuator
Пакет, в противном случае запуск будет сообщать об ошибке. -
spring-cloud-starter-dubbo
упаковка требует вниманияgroupId
, который определяется в соответствии с конкретным использованием зависимостей версии весеннего облака alibaba.- Используется во время инкубации
groupId
за:org.springframework.cloud
; - После инкубации проекта
groupId
Чтобы изменитьcom.alibaba.cloud
, поэтому пользователю нужно обратить внимание на то, правильно ли он используется. Избегайте проблемы, связанной с тем, что соответствующий пакет JAR не может быть загружен.
- Используется во время инкубации
второй шаг: Dubbo реализует интерфейсы
@Service
public class HelloServiceImpl implements HelloService {
@Override
public String hello(String name) {
return "hello " + name;
}
}
Примечание: здесь@Service
Заметка не весна, аorg.apache.dubbo.config.annotation.Service
аннотация.
третий шаг: настройка информации, связанной со службами Dubbo, например:
spring.application.name=alibaba-dubbo-server
server.port=8001
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 指定 Dubbo 服务实现类的扫描基准包
dubbo.scan.base-packages=com.didispace.alibaba.dubbo.server
dubbo.protocol.name=dubbo
dubbo.protocol.port=-1
dubbo.registry.address=spring-cloud://localhost
Инструкции по настройке следующие:
-
dubbo.scan.base-packages
: Определяет сканирующее тестовое пакет класса реализации службы DUBBO -
dubbo.protocol
: Конфигурация протокола, предоставляемая службой Dubbo, где имя вложенного атрибута — это имя протокола, а порт — порт протокола (-1 означает автоматически увеличивающийся порт, начиная с 20880). -
dubbo.registry
: конфигурация реестра службы Dubbo, где значением адреса подсвойства является «spring-cloud://localhost», что указывает на то, что он подключен к реестру Spring Cloud.
Примечание. Если вы используете Spring Boot 2.1 и более поздние версии, вам необходимо добавить конфигурациюspring.main.allow-bean-definition-overriding=true
четвертый шаг: Создайте основной класс приложения, например:
@EnableDiscoveryClient
@SpringBootApplication
public class DubboServerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboServerApplication.class, args);
}
}
Построить потребителя интерфейса службы
первый шаг: Создайте проект Spring Boot вpom.xml
Пакет API, созданный на первом этапе, и зависимость Spring Cloud Alibaba от Nacos и Dubbo представлены в , конкретный контент такой же, как у поставщика услуг:
<dependencies>
<!-- 第一步中构建的API包 -->
<dependency>
<groupId>com.didispace</groupId>
<artifactId>alibaba-dubbo-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<!--<groupId>com.alibaba.cloud</groupId>-->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
//...
</dependencies>
второй шаг: настройка информации, связанной со службами Dubbo, например:
spring.application.name=alibaba-dubbo-client
server.port=8002
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
dubbo.protocol.name=dubbo
dubbo.protocol.port=-1
dubbo.registry.address=spring-cloud://localhost
dubbo.cloud.subscribed-services=alibaba-dubbo-server
Уведомление:
- Подробнее здесь
dubbo.cloud.subscribed-services
Здесь настраивается параметр, указывающий имя службы, на которую нужно подписаться.alibaba-dubbo-server
Соответствующий является предыдущим поставщиком услугspring.application.name
Значение , которое является именем приложения поставщика услуг. - Если вы используете Spring Boot 2.1 и более поздние версии, вам необходимо добавить конфигурацию
spring.main.allow-bean-definition-overriding=true
.
третий шаг: Создайте основной класс приложения и реализуйте интерфейс, в котором вызывается служба Dubbo, например:
@EnableDiscoveryClient
@SpringBootApplication
public class DubboClientApplication {
public static void main(String[] args) {
SpringApplication.run(DubboClientApplication.class, args);
}
@Slf4j
@RestController
static class TestController {
@Reference
HelloService helloService;
@GetMapping("/test")
public String test() {
return helloService.hello("didispace.com");
}
}
}
Примечание: здесь@Reference
Аннотацияorg.apache.dubbo.config.annotation.Reference
Тестовая проверка
После завершения всей вышеописанной разработки мы можем последовательно запускать Naco, поставщиков услуг и потребителей услуг. После завершения запуска мы можем увидеть две службы, определенные выше, в списке служб консоли Nacos, например:
Затем мы можем вызвать потребителя службы, определенного в/test
Интерфейс запускает потребительские сервисы dubbo. Если все пройдет гладко, вы сможете получить следующие результаты:
$ curl localhost:8002/test
hello didispace.com
резюме
В приведенном выше примере, если вы когда-либо играли в Spring Cloud и Dubbo одновременно, вы определенно глубоко почувствуете это. Вам не нужно одновременно беспокоиться о настройке Eureka и Zookeeper, и вам не нужно одновременно обращать внимание на работоспособность этих двух промежуточных программ, вам нужно только уделять внимание и поддерживать Nacos . Для настройки и использования Dubbo конфигурация довольно проста, а написание кода мало чем отличается от предыдущего Dubbo. Благодаря интеграции Spring Cloud Alibaba пользователи Dubbo могут не только пользоваться преимуществами производительности, обеспечиваемыми исходным RPC, но и лучше пользоваться различными преимуществами Spring Cloud, а пользователи Spring Cloud на уровне управления услугами могут вариант. Можно сказать, что интеграция этой части действительно сделала две основные группы пользователей хорошо интегрированными и сыграла роль во взаимных достижениях. Доступны дополнительные руководства по Spring Cloud и Spring Cloud Alibaba.Нажмите, чтобы просмотреть.
использованная литература:официальная документация
пример кода
Клиентский код контента, представленный в этой статье, читатели примера могут проверить код на следующем складе.alibaba-dubbo-api
,alibaba-dubbo-server
,alibaba-dubbo-client
проект:
- Гитхаб:GitHub.com/first87112/sp…
- Гостиница:git ee.com/brother space/S…
Если вы заинтересованы в них, добро пожаловать, пометьте, подпишитесь, добавьте в избранное и вперед, чтобы поддержать!
Добро пожаловать, чтобы обратить внимание на мой общедоступный номер: Programmer DD, получить эксклюзивные учебные ресурсы и ежедневный толчок галантерейных товаров. Если вас интересует мой рекомендуемый контент, вы также можете подписаться на мой блог:didispace.com