Репликация через RabbitMQ

Сообщения об изменённых объектах выкладываются в очередь SemanticMDM.<ИдентификаторСистемы>+ ключ маршрутизации по приоритету при наличии

Атрибуты исходящего сообщения:

Наименование Значение Пояснение
app_id SemanticMDM Константа
message_id Целое число Идентификатор исходящего сообщения
reply_to Строка Наименование очереди, в которую следует отправлять сообщения об обработке
priority Целое число от 1 до 10 Приоритет сообщения, внутренний параметр MQ
delivery_mode Целое число Режим обработки, внутренний параметр MQ
content_encoding UTF-8 Кодировка тела сообщения, константа
content_type application/json Тип содержимого тела сообщения, константа
Тело сообщения Строка в кодировке UTF-8 Строка является сериализованным в Json ExportRootObject

Функции RPC

Вызов функций RPC осуществляется через очередь SemanticMDM.RPC. Трансферы параметров вызова функции должны быть унаследованы от базового класса RpcFunction, чтобы при сериализации их в Json возникло указание на фактический тип данных в атрибуте @type.


@XmlSeeAlso({RpcGetFile.class, RpcPing.class})
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonSubTypes({
        @JsonSubTypes.Type(value = RpcGetFile.class),
        @JsonSubTypes.Type(value = RpcPing.class),
})
public abstract class RpcFunction {
}

RpcPing

public class RpcPing extends RpcFunction {
    public String systemId;
}

Сообщить SemanticMDM, что система с идентификатором systemId жива и готова к приёму сообщений. Рекомендуется вызывать функцию один раз в минуту. Возвращаемый результат отсутствует. Пример Json:

{
  "@type": "RpcPing",
  "systemId": "1C"
}

RpcGetFile

public class RpcGetFile extends RpcFunction {
    public String fileHash;
}

Получить тело файла с известным хэшем. Возвращаемый результат – массив байт. Пример Json:

{
  "@type": "RpcGetFile",
  "fileHash": "123456789"
}

Обработка сообщения

После обработки входящего сообщения, успешной или неуспешной, клиент обязан уведомить SemanticMDM о данном факте. Уведомление должно быть выслано в топик, указанный в заголовке reply_to принятого сообщения со следующими атрибутами:

Наименование Значение Пояснение
app_id Строка Идентификатор системы
message_id Целое число Идентификатор обработанного сообщения
priority Целое число от 1 до 10 Приоритет сообщения, на усмотрение клиента
delivery_mode Целое число Режим обработки, на усмотрение клиента
content_encoding UTF-8 Кодировка тела сообщения, на усмотрение клиента
content_type application/json Тип содержимого тела сообщения, константа
Тело сообщения Строка в кодировке UTF-8 Строка должна быть сериализованным в Json ExportedObjectReply
class ExportedObjectReply {
    String sourceId; // Идентификатор созданного объекта, если был создан, в терминах клиента
    Set<String> deletedSourceIds; // Идентификаторы удалённых объектов в терминах клиента
    String info; // Информация о процессе обработки для журналирования
    boolean encounteredError; // Возникла ли ошибка во время обработки
    String mdmId; // Идентификатор обработанного объекта SemanticMDM как он был указан во входящем сообщении
}

Пример Json:

{
  "sourceId": "some-key-value",
  "deletedSourceIds": [
    "deleted-key-1",
    "deleted-key-2"
  ],
  "info": "successfully parsed",
  "encounteredError": false,
  "mdmId": "some-item-uuid"
}