Guía de migración de DPS v1 a DPS v2
Los siguientes pasos van a describir lo que es necesario para que los servicios se trasladen de DPS v1 a DPS v2.
Elimine los módulos no utilizados
Módulos de repositorio utilizados anteriormente por DPS v1,setting-<setting-name>-repository deben ser eliminados de los proyectos ya que ya no se utilizan en DPS v2.
Toda la configuración está ahora bajo módulos de dominio.setting-<setting-name>-domain.
Crear índices
En DPS v1 los índices para cada configuración se proporcionaron listos para usar. En DPS se pueden crear índices v2 a través de HOCON config.
Para cada configuración, debe crearse un conjunto de índices a través de reference.conf de un módulo de dominio.
ipf.dps.mongodb.index-config.<setting-type> {
index-1 = ["status:ASC"]
index-2 = ["processingEntity:ASC"]
index-3 = ["values.payload.field1:ASC"]
index-4 = ["values.payload.field2.field3:ASC"]
}
Los campos que están bajo la carga de configuración deben ser referidos como values.payload.<field-name> bajo índices.
El Creación del Índice DPS La página contiene más información sobre la creación de índices.
Notifications
DPSv2 puede proporcionar notificaciones después de que se realice cierta operación en una configuración. Estas notificaciones están deshabilitadas por defecto y se pueden configurar con las siguientes propiedades:
ipf.dps.notification-service.enabled = true # notification for all CRUD operations are sent
ipf.dps.notification-service.send-notifications-for-scheduled-settings = true # notification for all operation on scheduled settings are sent
También puede definir sus propias propiedades para habilitar/deshabilitar la notificación para cada definición de configuración.
@Value("${ipf.service.should-save-history.dpssampe-setting:true}")
private boolean historyEnabled;
@Value("${ipf.service.should-send-notification.dpssample-setting}")
private boolean notificationsEnabled;
@Bean
public SettingDefinition<DpsSampleSetting> dpsSampleSettingDefinition() {
return SettingDefinition.<DpsSampleSetting>builder()
.settingType(DpsSampleSetting.SETTING_TYPE)
.collectionName("setting-" + DpsSampleSetting.SETTING_TYPE)
.idFunction(setting -> setting.getProcessingEntity() + "-" + setting.getPayload().getFullName())
.historyEnabled(historyEnabled) (1)
.notificationsEnabled(notificationsEnabled) (2)
.payloadClass(DpsSampleSetting.class)
.payloadExample(payloadExample())
.searchableFieldsClass(DpsSampleSettingSearchableFields.class)
.searchableFieldsExample(dpsSampleSettingQueryExample())
.build();
}
| 1 | historia habilitada- Si se debe rastrear el historial de los cambios de configuración o no. Está habilitado por defecto. |
| 2 | notificaciones habilitadas- Si enviar Kafka notificaciones cuando se crea, actualiza o elimina la configuración. Está desactivado por defecto ya que DPS v1 no tenía esta funcionalidad. |
Kafkanecesita ser implementado para enviar/recibir notificaciones. Ejemplo de cómo configurar el tema de kafka y las notificaciones:
ipf.dps {
notification-service {
enabled = true
kafka {
producer {
topic = DPS_CRUD_NOTIFICATION
restart-settings = ${common-flow-restart-settings}
kafka-clients {
group.id = dps-crud-notification-group
}
}
}
}
}
common-flow-restart-settings {
min-backoff = 1s
max-backoff = 5s
random-factor = 0.25
max-restarts = 5
max-restarts-within = 10m
}
Más información sobre cómo implementar el punto final de recepción para estos Kafka las notificaciones se pueden encontrar aquí Notificación al Cliente de DPS
Consultas de Conector y Directas
La mayoría de los servicios que utilizaron DPS v1 implementó sus propios conectores y consultas directas. DPS v2 proporciona estos de forma predeterminada.
Se puede encontrar una descripción detallada sobre cómo importar estos aquí.Conectores e Implementaciones Directas La sugerencia es utilizar DPS interfaces v2 en lugar de custom implementaciones de servicio para evitar cualquier mala configuración.
El mejor enfoque sería cambiar custom implementaciones de servicio para utilizar DpsSearchClientPort,DpsCrudClientPort,DpsHistoryClientPort y otras interfaces proporcionadas, y para configurar propiedades específicas (conector o directo) como se describe en la página suministrada arriba.
Bases de datos
DPSv2 introduce configuraciones programadas y utiliza el Programador de Persistencia para su mantenimiento. Para configurar adecuadamente la persistencia scheduler hay una necesidad de crear dos nuevas colecciones y sus índices. La siguiente configuración debe ser añadida a su base de datos (ejemplo cosmos-schema.yaml):
- name: jobSpecification
throughput: 400
default_ttl_seconds: 3600 # should be tied to deleteTime
additional_indexes:
- keys:
- deleteTime
unique: false-keys:
- _id.jobSpecificationId
- _id.lastUpdated
unique: false-name: jobExecutionStatus
throughput: 400
default_ttl_seconds: 3600 # should be tied to deleteTime
additional_indexes:
- keys:
- deleteTime
unique: false-keys:
- _id.jobSpecificationId
- _id.lastUpdated
unique: false
MongoDB
Desde DPS v2 utiliza flujos de cambios,MongoDB debe tener un conjunto de réplicas para que los flujos de cambios funcionen. Esto es más una nota para la configuración de pruebas BDD (local) que para la configuración de producción (que siempre tendrá un conjunto de réplicas configurado).
El siguiente script debe ser añadido a los volúmenes del contenedor ipf-mongo:
# Initiate replication on the MongoDB node
mongo --eval "rs.initiate()"
until mongo --eval 'rs.status()' | grep -q PRIMARY
do
echo "Waiting for replication elections to finish..."
sleep 1s
done
echo "Election is done, populating initial test data.."
sleep 2s
y command: --replSet test --bind_ip_all debe ser añadido a la configuración del contenedor ipf-mongo.