Poder se puede, pero por temas de seguridad, tendrás que hablar con los de sistemas o SRE se tu empresa, ya que implica bastante configuración de seguridad.
Que tal, estoy teniendo un problemita, cuando hago docker-compose up para levantar el puerto anda todo perfecto, entro a la interfaz y todo eso. Pero no me lee las definiciones del .json. Mira que copie y pegue y sigue sin leerlas. Es mas en la aplicación docker me dice que leyó los archivos .config y .json pero no impactan las definiciones Perdón por joder tanto .
Muchas gracias de nuevo!!! Que pasa si en uno de los handler de los consumidores necesito inyectar depedencias? Si lo intento después me los pide en el services.AddHandlers... Me pudieras ayudar con esto por favor?
Esto es algo que tenía pensado hacer en un directo, pero ando sin tiempo así que imagino que lo haré fuera de cámara. La idea que tenía era utilizar escrutor para leer todas las clases e interfaces del assembly y meterlos al di con scrutor. Así puedes cargarlos como un a dependencia normal, y lo mismo para sus dependencias. En el estado actual tienes que hacer lo de getservice y ponerlo en el constructor. Pero eso, en un par de días o semanas tendré lo otro puesto haha
@@NetMentor Muchas gracias, quedo pendiente. Mientras estaba usando un ServiceLocator pero creo que termino incurriendo en un Antipatrón y por eso te preguntaba la buena práctica recomendada... En verdad muchas gracias por todo lo que estás haciendo, me ah ayudado bastante en mi día a día... Y lamento que no de el tiempo para otro video sobre el tema porque estaría genial!!!
@@NetMentor En verdad ya se me agotaron las ideas de como hacerlo sin incurrir en algún detalle y me ayudaría bastante terminar esta implementación... Quedo pendiente y agradezco de nuevo.
@@ErickGonzalez-uw3cg sin scrutor lo "único" que puedes hacer es construir el service provider antes de añadir los handlers. O hacer una librería que haga lo mismo que scrutor; por ahora puedes hacer algo como lo siguiente: x.Services.AddScoped(); var sp = TemporalServiceProvider(); x.Services.AddHandlers(new List() { new TUHandler(sp.GetRequiredService()), }); ServiceProvider TemporalServiceProvider(IServiceCollection sc) { #pragma warning disable ASP0000 return sc.BuildServiceProvider(); #pragma warning restore ASP0000 } Como digo es temporal hasta que implemente scrutor, para un test te sirve, pero para producción no es recomendable hacer eso. Un saludo.
Hola, justo lo acabo de implementar en un directo. aquí tienes el ejemplo github.com/ElectNewt/Distribt/blob/main/src/Services/Subscriptions/Distribt.Services.Subscriptions.Consumer/Program.cs Un saludo!
Uno de los mejores vídeos que he visto sobre RabbitMQ hasta la fecha. Yo tengo una duda y es más por desconocimiento, he hecho ya una implementación de RabbitMQ con diferentes servicios (llamarlos microservicios sería insultar a la gente del gremio) mal hecha por supuesto, pero funciona. La cosa es que no tengo ni idea de front-end, y le pregunté a un compañero y no supo aclarar mis dudas. Nosotros en back-end lo gestionamos todo, que si los mensajes, que si esto, que si lo otro, todo es una maravilla. Pero el cliente web también manda mensajes (lo bueno de RabbitMQ) y nos da igual que hayan usado, la cosa es que noes una REST API que tienes una respuesta HttpResponse (o lo que fuere) con su StatusCode y demás, si no que tienes una comunicación asíncrona y no me queda claro el tema de UX. Te pongo un ejemplo, tu necesitas los dato de una tabla (cientos de datos) por supuesto vas a hacer las peticiones poco a poco para no saturar y que sea rápido, así que tu mandas el mensaje, en nuestra implementación ese mensaje los respondemos a través de un Patrón Command encadenado con otro command que lo que hace es ejecutar el código que sea que tenga el mensaje y luego responden con una respuesta genérica que contendrá la información solicitada por el cliente web, con un identificador única por cada tipo de mensaje el cliente web tiene un switch/case gigante (lo peor que he visto en mi vida) donde identifica los mensajes y entonces ya hace lo que tenga que hacer, y es ahí donde me "peta" la cabeza, eso está mal SEGURO, osea, cuando lo vi me dije para mis adentros que no es posible que estemos haciendo eso y vaya a producción, además que todo ese proceso puede tardar, véase unos nano segundos o en el peor de los casos hasta alguno segundos ¿Qué pasa en todo ese tiempo? La pregunta sería: ¿Cuál es la mejor forma de responder a un mensaje cuando tienes una implementación asíncrona? Un saludo y perdón por el tostón.
hare un video sobre eso en unas semanas, bueno al ritomo que voy meses (4 o 5 videos quedan antes); Lo que comentas del front end no lo entiendo 😂 y lo del swich gigante esta mal fijo. ahora, funciona y quizá no renta re-escribir el código. de todas formas cuando se hace algo así con una api se devuelve un identificador y la URL donde consultar el estado de la petición y cuando se ha completado el "get por id" esta disponible. como digo, veremos un vídeo ya uqe he visto sitios donde la api se queda pensando 10 o 15 minutos hasta que todo termina... el mismo proceso debe aplicar para peticiones que tardan eso, 10 minutos... un saludo.
Buenas!, gran contenido!!!, una consulta, cómo se podría hacer si se quiere manejar el orden de las colas si resulta de importancia para el negocio?, la ultima duda, cómo se podría hacer para no recibir mensajes duplicados?, saludos!
la documentación de rabbitMQ dice que si van a una cola llegan en orden; yo cuando he probado, siempre ha sido así, pero RabbitMQ no lo he utilizado en la oficina nunca, siempre he trabajado con kafka o con las propias del proveedor. Lo de los mensajes duplicados es con idempotence, o un Id único y llevar cuenta de los mensajes que procesas. si usas rabbitmq puedes utilizar el header x-message-deduplication que comprobara que el mensaje sea único a la hora de publicar, pero lo ideal sería hacer esa comprobación a la hora de consumir.
Blog: www.netmentor.es/entrada/rabbitmq-comunicacion-asincrona
Twitter: twitter.com/NetMentorTW
Demasiado bueno. !
Sos Grande crack, gracias!
Muchas gracias.
Buen video!, consulta puedo conectarme desde Azure a un Rabbit MQ que esta en AWS? Gracias
Poder se puede, pero por temas de seguridad, tendrás que hablar con los de sistemas o SRE se tu empresa, ya que implica bastante configuración de seguridad.
Que tal, estoy teniendo un problemita, cuando hago docker-compose up para levantar el puerto anda todo perfecto, entro a la interfaz y todo eso. Pero no me lee las definiciones del .json. Mira que copie y pegue y sigue sin leerlas. Es mas en la aplicación docker me dice que leyó los archivos .config y .json pero no impactan las definiciones
Perdón por joder tanto .
Estas utilizando la misma versión de rabbitmq que utilice yo? Es posible que estés utilizando otra y la configuración tenga que ser distinta
Buenisimo video gracias
Muchas gracias de nuevo!!! Que pasa si en uno de los handler de los consumidores necesito inyectar depedencias? Si lo intento después me los pide en el services.AddHandlers... Me pudieras ayudar con esto por favor?
Esto es algo que tenía pensado hacer en un directo, pero ando sin tiempo así que imagino que lo haré fuera de cámara.
La idea que tenía era utilizar escrutor para leer todas las clases e interfaces del assembly y meterlos al di con scrutor. Así puedes cargarlos como un a dependencia normal, y lo mismo para sus dependencias.
En el estado actual tienes que hacer lo de getservice y ponerlo en el constructor.
Pero eso, en un par de días o semanas tendré lo otro puesto haha
@@NetMentor Muchas gracias, quedo pendiente. Mientras estaba usando un ServiceLocator pero creo que termino incurriendo en un Antipatrón y por eso te preguntaba la buena práctica recomendada... En verdad muchas gracias por todo lo que estás haciendo, me ah ayudado bastante en mi día a día... Y lamento que no de el tiempo para otro video sobre el tema porque estaría genial!!!
@@NetMentor En verdad ya se me agotaron las ideas de como hacerlo sin incurrir en algún detalle y me ayudaría bastante terminar esta implementación... Quedo pendiente y agradezco de nuevo.
@@ErickGonzalez-uw3cg sin scrutor lo "único" que puedes hacer es construir el service provider antes de añadir los handlers. O hacer una librería que haga lo mismo que scrutor; por ahora puedes hacer algo como lo siguiente:
x.Services.AddScoped();
var sp = TemporalServiceProvider();
x.Services.AddHandlers(new List()
{
new TUHandler(sp.GetRequiredService()),
});
ServiceProvider TemporalServiceProvider(IServiceCollection sc)
{
#pragma warning disable ASP0000
return sc.BuildServiceProvider();
#pragma warning restore ASP0000
}
Como digo es temporal hasta que implemente scrutor, para un test te sirve, pero para producción no es recomendable hacer eso.
Un saludo.
Hola, justo lo acabo de implementar en un directo. aquí tienes el ejemplo github.com/ElectNewt/Distribt/blob/main/src/Services/Subscriptions/Distribt.Services.Subscriptions.Consumer/Program.cs
Un saludo!
Excelente video. ¿ Hay posibilidad que hagas un vídeo implementando apache Kafka.? Saludos .
Quiero hacer uno, pero tardará unos meses seguro, pero si, eventualmente si
Uno de los mejores vídeos que he visto sobre RabbitMQ hasta la fecha. Yo tengo una duda y es más por desconocimiento, he hecho ya una implementación de RabbitMQ con diferentes servicios (llamarlos microservicios sería insultar a la gente del gremio) mal hecha por supuesto, pero funciona. La cosa es que no tengo ni idea de front-end, y le pregunté a un compañero y no supo aclarar mis dudas. Nosotros en back-end lo gestionamos todo, que si los mensajes, que si esto, que si lo otro, todo es una maravilla. Pero el cliente web también manda mensajes (lo bueno de RabbitMQ) y nos da igual que hayan usado, la cosa es que noes una REST API que tienes una respuesta HttpResponse (o lo que fuere) con su StatusCode y demás, si no que tienes una comunicación asíncrona y no me queda claro el tema de UX. Te pongo un ejemplo, tu necesitas los dato de una tabla (cientos de datos) por supuesto vas a hacer las peticiones poco a poco para no saturar y que sea rápido, así que tu mandas el mensaje, en nuestra implementación ese mensaje los respondemos a través de un Patrón Command encadenado con otro command que lo que hace es ejecutar el código que sea que tenga el mensaje y luego responden con una respuesta genérica que contendrá la información solicitada por el cliente web, con un identificador única por cada tipo de mensaje el cliente web tiene un switch/case gigante (lo peor que he visto en mi vida) donde identifica los mensajes y entonces ya hace lo que tenga que hacer, y es ahí donde me "peta" la cabeza, eso está mal SEGURO, osea, cuando lo vi me dije para mis adentros que no es posible que estemos haciendo eso y vaya a producción, además que todo ese proceso puede tardar, véase unos nano segundos o en el peor de los casos hasta alguno segundos ¿Qué pasa en todo ese tiempo?
La pregunta sería: ¿Cuál es la mejor forma de responder a un mensaje cuando tienes una implementación asíncrona?
Un saludo y perdón por el tostón.
hare un video sobre eso en unas semanas, bueno al ritomo que voy meses (4 o 5 videos quedan antes); Lo que comentas del front end no lo entiendo 😂 y lo del swich gigante esta mal fijo. ahora, funciona y quizá no renta re-escribir el código.
de todas formas cuando se hace algo así con una api se devuelve un identificador y la URL donde consultar el estado de la petición y cuando se ha completado el "get por id" esta disponible.
como digo, veremos un vídeo ya uqe he visto sitios donde la api se queda pensando 10 o 15 minutos hasta que todo termina...
el mismo proceso debe aplicar para peticiones que tardan eso, 10 minutos...
un saludo.
@@NetMentor soy paciente, las cosas que se aprenden poco a poco, se aprenden bien. :)
Gracias.
Buenas!, gran contenido!!!, una consulta, cómo se podría hacer si se quiere manejar el orden de las colas si resulta de importancia para el negocio?, la ultima duda, cómo se podría hacer para no recibir mensajes duplicados?, saludos!
la documentación de rabbitMQ dice que si van a una cola llegan en orden; yo cuando he probado, siempre ha sido así, pero RabbitMQ no lo he utilizado en la oficina nunca, siempre he trabajado con kafka o con las propias del proveedor.
Lo de los mensajes duplicados es con idempotence, o un Id único y llevar cuenta de los mensajes que procesas.
si usas rabbitmq puedes utilizar el header x-message-deduplication que comprobara que el mensaje sea único a la hora de publicar, pero lo ideal sería hacer esa comprobación a la hora de consumir.
Clarísimo!, muchas gracias!!
Buen día como estas? con que ID estas trabajando
Jetbrains Rider
@@NetMentor muchisimas gracias :)
Amigo bonita y valiosa información. Un consejo, si modularas mejor seria bueno para que te entienda mas gente. Saludos
Minicorrección, en el título pone "patón"
🤦♂️ muchas gracias, lo acabo de arreglar.