All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.itv.bucky.example.marshalling.MarshallingPublisher.scala Maven / Gradle / Ivy

The newest version!
package com.itv.bucky.example.marshalling

import cats.effect.{ExitCode, IO, IOApp}
import com.itv.bucky.PayloadMarshaller.StringPayloadMarshaller
import com.itv.bucky.backend.javaamqp.JavaBackendAmqpClient
import com.itv.bucky.decl._
import com.itv.bucky.example.marshalling.Shared.Person
import com.itv.bucky.publish._
import com.typesafe.config.ConfigFactory

import scala.concurrent._
import scala.concurrent.duration._
import scala.concurrent.ExecutionContext.Implicits.global

object MarshallingPublisher extends IOApp {
  import com.itv.bucky._

  //start snippet 1
  val brokerHostname                     = ConfigFactory.load("bucky").getString("rmq.host")
  val amqpClientConfig: AmqpClientConfig = AmqpClientConfig(brokerHostname, 5672, "guest", "guest")

  object Declarations {
    val routingKey = RoutingKey("personPublisherRoutingKey")
    val exchange   = Exchange(ExchangeName("exchange.person-publisher"))
  }
  case class Person(name: String, age: Int)
  //end snippet 1

  //start snippet 2
  val personMarshaller: PayloadMarshaller[Person] =
    StringPayloadMarshaller.contramap(p => s"${p.name},${p.age}")
  implicit val publisherConfig: PublishCommandBuilder.Builder[Person] =
    publishCommandBuilder(personMarshaller)
      .using(Declarations.routingKey)
      .using(Declarations.exchange.name)
  //end snippet 2

  //start snippet 3
  override def run(args: List[String]): IO[ExitCode] =
    JavaBackendAmqpClient[IO](amqpClientConfig).use { client =>
      for {
        _ <- client.declare(Seq(Declarations.exchange))
        publisher <- client.publisherOf[Person]
        _ <- publisher(Person("Bob", 67))
      } yield ExitCode.Success
    }
  //end snippet 3

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy