DamiBus está especialmente diseñado para desacoplar la comunicación entre múltiples módulos locales (especialmente módulos desconocidos, módulos de aislamiento y módulos de dominio). Cero dependencias, especialmente adecuado para DDD.
Características
Combinando los conceptos de Bus y RPC, se puede utilizar para distribución de eventos, llamadas de interfaz y respuesta asincrónica.
- Admite la conducción de transacciones (distribución síncrona, transmisión transparente de excepción)
- Admite interceptores e identificadores de eventos (conveniente para el seguimiento)
- Admite la clasificación de oyentes y la entrega de archivos adjuntos (varios monitores pueden cooperar entre sí)
- Admite dos estilos de experiencia, Bus y Api
Diferencias con EventBus y ApiBean comunes
Cantidad | Autobús de eventos | API | Hoja informativa de Dami | |
---|---|---|---|---|
transmisión | tener | tener | ninguno | Enviar + escuchar y modo Api |
respuesta | tener | ninguno | tener | Enviar y esperar respuesta (sendAndResponse) + escuchar (escuchar) + responder (responder) y modo Api |
llamar de vuelta | Sí+ | ninguno | tener- | Enviar y esperar devolución de llamada (sendAndCallback) + escuchar (escuchar) + responder (responder) |
acoplamiento | débil- | Débil+ | Fuerte++ |
Si implica aislamiento del cargador de clases: márquelo como compilado en el programa principal y márquelo como opcional en otros módulos.
¿Qué se actualiza esta vez?
- TopicRouterPatterned agrega soporte de clasificación
- TopicRouterCapacidades de enrutamiento independientes con patrones, personalizables
- Agregar personalización del modo de enrutamiento basado en etiquetas
- Agregar @DamiTopic: atributo de anotación de índice
- dami-springboot-starter, aumenta la compatibilidad con spronboot 2.0
- Solucione el problema de que la clase de implementación dami-springboot-starter no se puede registrar y cancelar el registro normalmente después de ser proxy
Efectos de personalización recientemente agregados (consulte la página de inicio del almacén para obtener más detalles. También puede personalizar su propia ruta según sea necesario):
public class Demo15_path {
public void main(){
//切换为模式匹配路由器 + RoutingPath(支持 * 和 ** 占位符;支持 / 或 . 做为间隔)
DamiConfig.configure(new TopicRouterPatterned(RoutingPath::new));
//拦截
Dami.bus().listen("demo/a/*", (payload) -> {
System.err.println(payload);
});
//发送事件
Dami.bus().send("demo/a/1", "world1");
Dami.bus().send("demo/a/2", "world2");
}
}
public class Demo15_tag {
public void main(){
//切换为模式匹配路由器 + RoutingTag(":"前为主题,后按 "," 号分割作为tag)
DamiConfig.configure(new TopicRouterPatterned(RoutingTag::new));
//拦截
Dami.bus().listen("demo.a:id", (payload) -> {
System.err.println(payload);
});
//发送事件
Dami.bus().send("demo.a:id", "world1");
Dami.bus().send("demo.a:id,name", "world2");
}
}
Pregunta: ¿Por qué no utilizar la cola de mensajes distribuida? Lo siento, es realmente una dimensión diferente.