Enviar un jms desde un script scala (Ammonite)

Enviar un jms desde un script scala (Ammonite)

Siempre existe la necesidad de tener utilitarios para hacer pequeñas tareas, en mi caso volvió a aparecer la necesidad de enviar un mensaje a cola, y aunque podría crear mi proyecto java, necesitaría tener agregar la dependencia ya sea como un jar, o crear un proyecto tipo maven, y esto se va complicando si tengo que pasarlo a otra persona que no es precisamente un desarrollador java.

Asi que volvi a revisar el proyecto http://ammonite.io/ y me doy con la sorpresa que ya esta andando excelente, a comparación de hace ya varios meses que lo vi por primera vez. Lo segundo que me quedaba era ver una forma fácil de enviar el JMS y si fuera con algo de akka, seria aun mejor, ya que es algo que quiero seguir aprendiendo, y o maravilla, me encuentro con el proyecto alpakka, que seria el camel de akka.

JMS Connector · Alpakka
Alpakkadeveloper.lightbend.com

Por lo que logre tener de una forma relativamente sencilla, un script para mandar jms de tipo long, sin tener que bajar a mano o añadiendo archivos adicionales de mave, gradle o sbt.

import $ivy.`org.apache.activemq:activemq-core:5.3.0`
import $ivy.`com.lightbend.akka::akka-stream-alpakka-jms:0.16`
import java.io

import org.apache.activemq.ActiveMQConnectionFactory
import akka.Done
import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.{Sink, Source}
import akka.stream.alpakka.jms.scaladsl.JmsSink
import akka.stream.alpakka.jms.JmsSinkSettings

import scala.concurrent.{Await, Future}
import scala.concurrent.duration._

implicit val system = ActorSystem("my-system")
implicit val materializer = ActorMaterializer()

val connectionFactory = new ActiveMQConnectionFactory("failover://(nio://miserverapacheactivemq:61616)?maxReconnectAttempts=-1")

val jmsSink: Sink[io.Serializable, Future[Done]] = JmsSink.objectSink(
JmsSinkSettings(connectionFactory).withQueue("test.queue")
)

val out = Source(List(193899, 89358).map(new java.lang.Long(_))).runWith(jmsSink)

Await.result(out, 1 minute)
println(s"Finish send to billing ($out)")

Codigo en BitBucket:

Enviar un mensaje JMS usando scala, alpakka y akka usando ammonite.io

Lo único que necesitan para hacer correr el proyecto es tener instalado el Ammonite