Введение
Golang MQTT сервер, кластерная версия, в настоящее время поддерживает кластеры БД и прямые подключения.
Использование
Тестирование клиентского вызова
Можно использовать v5 кодировщика-декодера Paho-Golang с открытым исходным кодом для тестирования.
// После локального запуска службы брокера
// Этот код можно скопировать непосредственно в paho_client_test.go для тестирования
func TestClientTest(t *testing.T) {
conn, _ := net.Dial("tcp","127.0.0.1:1883")
c := NewClient(ClientConfig{
Conn: conn,
Router: NewSingleHandlerRouter(func(p *Publish) {
fmt.Println(p.String())
}),
})
c.serverProps.SharedSubAvailable = true
require.NotNil(t, c)
c.SetDebugLogger(log.New(os.Stderr, "CONNECT: ", log.LstdFlags))
cp := &Connect{
KeepAlive: 30,
ClientID: "testClient",
CleanStart: true,
Properties: &ConnectProperties{
ReceiveMaximum: Uint16(200),
},
WillMessage: &WillMessage{
Topic: "will/topic",
Payload: []byte("am gone"),
},
WillProperties: &WillProperties{
WillDelayInterval: Uint32(200),
}
}
ca, err := c.Connect(context.Background(), cp)
require.Nil(t, err)
assert.Equal(t, uint8(0), ca.ReasonCode)
time.Sleep(10 * time.Millisecond)
s := &Subscribe{
Subscriptions: map[string]SubscribeOptions{
"test/1": {QoS: 1},
"test/2": {QoS: 2},
"test/3": {QoS: 0},
"$share/aa/test/1": {QoS: 0},
}
}
_, err = c.Subscribe(context.Background(), s)
require.Nil(t, err)
//assert.Equal(t, []byte{1, 2, 0}, sa.Reasons)
time.Sleep(10 * time.Millisecond)
var p *Publish
p = &Publish{
Topic: "test/0",
QoS: 0,
Payload: []byte("test payload"),
}
_, err = c.Publish(context.Background(), p)
require.Nil(t, err)
time.Sleep(10 * time.Millisecond)
p = &Publish{
Topic: "test/1",
QoS: 1,
Payload: []byte("test payload"),
}
pa, err := c.Publish(context.Background(), p)
require.Nil(t, err)
assert.Equal(t, uint8(0), pa.ReasonCode)
time.Sleep(20 * time.Millisecond)
p = &Publish{
Topic: "test/2",
QoS: 2,
Payload: []byte("test payload"),
}
pr, err := c.Publish(context.Background(), p)
require.Nil(t, err)
assert.Equal(t, uint8(0), pr.ReasonCode)
time.Sleep(30 * time.Millisecond)
}
Текущие поддерживаемые решения
Используя способ хранения данных кластера базы данных, можно предоставить услуги записи через несколько мастеров и получить данные от рабов. Это может предотвратить единичный сбой главного узла и не будет подключать все брокеры к одному экземпляру базы данных. (Конкретные знания см. в DDIA). Для данных модели предметной области, которые добавляют временную метку, рекомендуется решить, следует ли отказаться от данных на основе временной метки при получении данных подписчиками.
Запуск нескольких узлов
MQTTX использует
Оптимизация для будущего
--- В настоящее время узел не удаляет его сразу, а ждёт истечения срока действия, после чего система автоматически удаляет его. Когда узел снова подключится к другому узлу, другой узел уведомит этот узел об удалении старого сеанса, затем другой узел получит его из базы данных и инициализирует его. Обратите внимание на сообщения QoS=0.
UML-диаграммы, схемы вызовов методов в разных пакетах (доступна по ссылке).
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )