Не знаю сталкивались ли вы с подобной ситуацией в работе:
Отладка Dubbo-интерфейсов является сложной задачей, требующей использования команд telnet или вызова консьюмера для активации. Формат параметров команд telnet сложен, поэтому при каждом использовании следует быть внимательным, чтобы избежать ошибок. Отладка методов с передачей сложных объектов как параметров также представляет собой сложность. Временные затраты на создание Java API для вызова этих интерфейсов могут быть значительными.
Все эти проблемы я встречал в своей работе и заметил, что большинство времени тратится на тестирование Dubbo-сервисов. Поэтому я решил потратить свободное время на создание эффективного инструмента для тестирования Dubbo, который открыт для общественного использования.
Этот инструмент уже используется в реальной среде более года, основные функции которого полностью отшлифованы. Дальнейшее обслуживание версий будет продолжено.
Код доступен по следующим адресам:
https://gitee.com/IdeaHome_admin/dubbo-proxy-tools
Примечание: если вам понравился этот проект, пожалуйста, оцените его звездой.
Ниже приведены инструкции по использованию после обновления до версии 2.0.3-release. Эта версия позволяет автоматически заполнять параметры запросов Dubbo. Подробнее см. конфигурацию application.properties.
### Как установить данный инструмент
Новый код объединяет frontend и backend, что снижает затраты на установку.
Frontend использует простую технологию Vue. Для изменения адреса сервера достаточно изменить значение переменной server_addr
в файле constants.js.
По умолчанию адрес сервера:
let server_addr = "http://127.0.0.1:7090/";
Backend реализован с использованием Spring Boot. Основные настройки находятся в файле application.properties. Необходимо изменить параметры подключения к базе данных MySQL.
server.port=7090
application.invoker.name=iubbo-invoker-proxy
spring.datasource.druid.password=password
spring.datasource.druid.username=root
spring.datasource.druid.url=jdbc:mysql://10.11.9.243:3306/iubbox
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
mybatis-plus.configuration.map-underscore-to-camel-case=true
spring.redis.port=6379
spring.redis.host=localhost
spring.redis.password=password
# Корневой узел регистрации Dubbo в Zookeeper
zk.dubbo.root=/dubbo
# Измените эту строку, если путь к методу был изменён
zk.dubbo.method.root=/dubbo/%s/providers
# Адрес для регистрации параметров Dubbo при использовании Zookeeper
zk.meta.data.addr=/dubbo/metadata/%s
zookeeper.base.sleep.times=3000
zookeeper.max.retry.times=4
CREATE TABLE `t_dubbo_invoke_req_record` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL COMMENT 'Идентификатор пользователя',
`arg_json` varchar(2500) COLLATE utf8_bin DEFAULT NULL COMMENT 'Параметры запроса Dubbo в виде JSON',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8mb4;
```CREATE TABLE `t_user` (
`id` int(9) NOT NULL AUTO_INCREMENT,
`username` varchar(60) COLLATE utf8_bin DEFAULT NULL,
`password` varchar(30) COLLATE utf8_bin DEFAULT NULL,
`createTime` datetime DEFAULT CURRENT_TIMESTAMP,
`updateTime` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8mb4;
CREATE TABLE `t_register_config` (
`id` int(6) NOT NULL AUTO_INCREMENT,
`host` varchar(255) DEFAULT NULL COMMENT 'Host address',
`ip` varchar(60) DEFAULT NULL COMMENT 'Real IP of the registration center',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`type` smallint(2) DEFAULT NULL COMMENT 'Type of the registration center: 1 - ZooKeeper, 2 - Nacos',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `t_login_status` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(9) DEFAULT NULL COMMENT 'User identifier',
`user_token` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT 'User token',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'Creation date of record',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Date of last update of record',
PRIMARY KEY (`id`),
KEY `idx_user_token` (`user_token`) USING HASH
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
t_user используется для хранения информации о пользователях.
t_dubbo_invoke_req_record используется для хранения данных о вызовах методов Dubbo.
t_register_config используется для хранения конфигураций регистрационного центра.
t_login_status используется для хранения информации о состоянии авторизации.Наконец, это входной класс для запуска org.iubbo.proxy.IubboXInvokerApplication.Успешное запуск скриншота
### О руководстве по использованию данного инструмента
Данный инструмент делит пользователей на две категории: авторизованные аккаунты и незарегистрированные аккаунты. Авторизованные пользователи могут сохранять примеры запросов, что позволяет им легко извлекать информацию при последующем использовании. Незарегистрированные пользователи не имеют возможности сохранять примеры запросов, но это не мешает им использовать этот инструмент для тестирования.
Адрес главной страницы: http://localhost:7090/html/test-dubbo-web.html или переходите по адресу: http://localhost:7090/html/index.html
Скриншот главной страницы:
Примечание: В версии 2.0.0 были сделаны небольшие изменения в цветовой схеме. Если вам не нравится зелёный цвет, вы можете его изменить в коде.
В версии 2.0.0 конфигурация центра регистрации была вынесена в управление через MySQL:
Необходимо добавить запись в таблицу t_register_config, чтобы увидеть соответствующую информацию:
Перед тем как тестировать интерфейсы Dubbo, обычно мы получаем список сервисов из ZK. Процесс такой:
Нажмите на поле ввода, введите буквы или цифры, связанные с конфигурацией JS, и система предложит варианты совпадений:
После выбора адреса ZK нажмите кнопку "Получить адрес ZK" (ранее некоторые коллеги затруднялись с этим шагом).
При получении адреса ZK сервер будет отправлять запрос на основе указанного IP в конфигурации JS, и успешное выполнение запроса будет отражено сообщением:
Ниже представлено отфильтровывание адресов служб Dubbo. Под командой получения адреса ZooKeeper располагается выпадающий список, в котором должны быть внедрены названия всех служб Dubbo, доступных в ZooKeeper.
Выберите соответствующее имя сервиса, а затем введите название метода, связанное с этим интерфейсом, в текстовое поле слева ("Введите имя"):
Пример тестирования метода:
public interface DubboService {
/**
* Тестовый метод интерфейса
*
* @param str входной параметр
* @return результат выполнения
*/
String doTest(String str);
}
```Затем настройте связанные параметры и названия:
Выберите тип параметра и значение:

После выбора параметров вам потребуется один раз нажать кнопку "Добавить параметр", чтобы гарантировать, что заданные параметры будут применены.Наконец, отправьте запрос:

Справа от основных параметров конфигурации находится модуль для настройки дополнительных параметров consumer'а, эти параметры используются в повседневной работе. Здесь также присутствует очень удобная опция прямого соединения.
### Указание адреса регистрации Nacos
В версии 2.0.1 была добавлена совместимость с центром регистрации Nacos:

Этот раздел поддерживает группировку по namespace и group для поиска dubbo.
### Дополнительные параметры
Личным любимым параметром является опция прямого соединения, так как она часто используется во время разработки для проведения локальных тестов:

Если вы хотите сохранить свои предыдущие тестовые примеры dubbo, вам нужно будет войти в систему или зарегистрироваться заново:
#### Сохранение тестовых сценариев

#### Просмотр информации о сохранённых сценариях
Пользователю необходимо самостоятельно обновить страницу, чтобы отобразить информацию о сохранённых сценариях:

Нажатие на выбор параметров приведёт к повторному отображению ранее использованных данных запроса.### Передача тестовых сценариев
Нажатие кнопки "Передать тестовый сценарий" позволяет передать сценарий другому пользователю.

#### Пресс-тестирование
Поддержка конфигурации для проведения нагрузочного тестирования на dubbo-интерфейсы.

### Анализ деталей запроса
Для каждого запроса к dubbo будут отображаться соответствующие данные запроса и ответа:
Информация о данных ответа:

Информация о фактически отправленных параметрах к серверной части dubbo:

Информация о времени выполнения запроса:
### Уникальные параметры запроса
Этот инструмент поддерживает различные типы параметров, используемых при разработке. В настоящее время поддерживаются обычные параметры.
*Примечание:* Формат параметров должен совпадать с порядком и типами параметров метода Dubbo, иначе сервер вернет ошибку "метод не найден".
Java часто используемые базовые типы данных: `boolean`, `short`, `int`, `long`, `double`, `char`, `float`
Java часто используемые объектные типы данных:
```java
java.lang.String,
java.lang.Integer,
java.lang.Object,
java.util.List,
java.lang.Class,
java.lang.Long,
java.lang.Boolean,
java.util.Map,
java.util.Date,
java.lang.Float,
java.lang.Double
### Передача параметра в виде пользовательского объекта
Если вы столкнулись со следующей ситуацией при реальной работе и вам требуется вызвать указанный ниже метод, то вам потребуется использовать пользовательский параметр:
Предположим, что перед вами стоит задача передать параметр типа List, где каждый элемент списка представляет собой пользовательский объект, как показано ниже:
List<UserDTO> testUserDtoList(List<UserDTO> userDTOList, Class<?> clazz);
В таком случае пример передачи параметра может выглядеть следующим образом:
Обратите внимание на соответствие порядка передачи параметров и порядка параметров в методе. Например, если метод определён следующим образом:
<T> List<T> getList(List<Long> var1, Class<T> var2);
То входящие параметры должны сначала содержать параметр типа List
, а затем параметр типа Class
.
Пример правильного использования: (сначала указан параметр типа List
, затем параметр типа Class
)
Пример неправильного использования: (сначала указан параметр типа Class
, затем параметр типа List
)## Реальная работа
На данный момент этот инструмент используется в нашей компании уже около года, работает стабильно, что значительно повысило эффективность работы команды. Надеемся, что этот инструмент также окажется полезным для вас.
При использовании инструмента, если возникли какие-либо проблемы или есть предложения по его улучшению, присоединяйтесь к нашему WeChat-группе ниже.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )