-
Notifications
You must be signed in to change notification settings - Fork 69
Upgrading
Tim Harper edited this page Aug 31, 2015
·
14 revisions
Upgrade notes from RC1 to RC2? It looks like I completely blew my commitment to keep API changes to a minimum at this point. This represents one of the largest API changes, of all. I'm seriously excited about it.
-
TopicMessage,QueueMessage,ExchangeMessageobjects have becomeMessage.topic,Message.queue,Message.exchange, etc. -
ConfirmedMessagehas become simplyMessage, as it is the default. -
UnconfirmedMessagegained a symmetrical Factory function API (UnconfirmedMessage.topic,UnconfirmedMessage.factory, etc.) -
QueueBindinghas becomeQueue,ExchangeBindinghas becomeExchange.-
TopicBinding,HeadersBinding,FanoutBindingreceive aQueuedefinition and anExchangedefinition, rather than having the parameters for the creation of each flatten. -
PassiveQueueBindinghas becomeQueue.passive.Queue.passivecan receive aQueuedefinition which will be used to declare the queue in the event that the queue in question doesn't already exist. -
Exchange.passivehas been created, similarly, can receive a non-passiveExchangedefinition. -
Exchangedefinitions are generically typed; if you pass an Exchange[Exchange.Topic.Value] to a HeadersBinding, the compiler will yell at you.
-
-
RecoveryStrategy.limitedRedeliveruses a RabbitMQ queue with dead-letter forwarding options and aTTLto handle message retry. The messages still go to the back of the line, but the consumer is no longer slowed down in failure mode. - The
Directivesqueue binding DSL has been updated to incorporate the above changes.
-
com.spingo.op_rabbit.consumer._was moved intocom.spingo.op_rabbit._; update your imports, accordingly. - The method of instantiating
Subscriptionhas changed, substantially.Subscriptionis now completely stateless. - Casting Header values in the Handler DSL has changed, and supports
optionalProperty.
Before, subscriptions were declared and registered like this:
val subscription = new Subscription {
// A qos of 3 will cause up to 3 concurrent messages to be processed at any given time.
def config = channel(qos = 3) {
consume(topic("such-message-queue", List("some-topic.#"))) {
body(as[Person]) { person =>
// do work; this body is executed in a separate thread, as provided by the implicit execution context
ack()
}
}
}
}
rabbitControl ! subscription
subscription.initialized.foreach { _ =>
println("Initialized!")
subscription.close()
}Subscription had a close() method and a closed property. This is no more.
The above is rewritten as follows for v1.0.0-RC1:
val subscription = Subscription {
// A qos of 3 will cause up to 3 concurrent messages to be processed at any given time.
def config = channel(qos = 3) {
consume(topic("such-message-queue", List("some-topic.#"))) {
body(as[Person]) { person =>
// do work; this body is executed in a separate thread, as provided by the implicit execution context
ack()
}
}
}
}
val subscriptionRef = subscription.register(rabbitControl)
subscriptionRef.initialized.foreach { _ =>
println("Initialized!")
subscriptionRef.close()
}Before, HeaderValues were cast using as follows:
property(Header("x-retries")).as(typeOf[Int])This did not work for optionalProperty; the old way no longer works and the new way is shorter:
property(Header("x-retries").as[Int])
optionalProperty(Header("x-retries").as[Int])