什么是AMQP
首先,快速介绍AMQP。 AMQP代表“高级消息队列协议”,是消息传递的开放标准。 AMQP 主页声明其愿景是:“成为所有消息中间件之间互操作性的标准协议”。 AMQP定义了用于交换消息的传输级别协议,该协议可用于集成来自许多不同平台,语言和技术的应用程序。
有许多工具可以实现此协议,但是RabbitMQ引起了越来越多的关注。 RabbitMQ是使用AMQP的基于Erlang的开源消息代理。 所有会说AMQP的应用程序都可以连接并使用RabbitMQ。 因此,在本文中,我们将展示如何将基于Play2 / Scala / Akka的应用程序连接到RabbitMQ。 在本文中,我们将向您展示如何实现两种最常见的方案:
- 发送/接收:我们将配置一个发件人每隔几秒钟发送一条消息,并使用两个侦听器以循环方式从队列中读取消息。
- 发布/订阅:在此示例中,我们将创建几乎相同的方案,但是这次,侦听器将同时获得消息。
我假设您已经安装了RabbitMQ。 如果不是,请按照其网站上的说明进行操作。
设置基本的Play 2 / Scala项目
在此示例中,我创建了一个新的Play 2项目。 这样做很容易:
jos@Joss-MacBook-Pro.local:~/Dev/play-2.0-RC2$ ./play new Play2AndRabbitMQ
_ _
_ __ | | __ _ _ _| |
| '_ \| |/ _' | || |_|
| __/|_|\____|\__ (_)
|_| |__/
play! 2.0-RC2, http://www.playframework.org
The new application will be created in /Users/jos/Dev/play-2.0/PlayAndRabbitMQ
What is the application name?
> PlayAndRabbitMQ
Which template do you want to use for this new application?
1 - Create a simple Scala application
2 - Create a simple Java application
3 - Create an empty project
> 1
OK, application PlayAndRabbitMQ is created.
Have fun!
我曾经使用scala-ide插件在Eclipse上工作,所以我执行play eclipsify并将项目导入Eclipse。
我们需要做的下一步是建立正确的依赖关系。 Play为此使用sbt,并允许您从项目目录中的build.scala文件配置依赖项。 我们将添加的唯一依赖关系是RabbitMQ的Java客户端库。 即使Lift提供了一个基于Scala的AMQP库,但我发现直接使用RabbitMQ也是一样容易。 添加依赖项后,我的build.scala如下所示:
import sbt._
import Keys._
import PlayProject._
object ApplicationBuild extends Build {
val appName = "PlayAndRabbitMQ"
val appVersion = "1.0-SNAPSHOT"
val appDependencies = Seq(
"com.rabbitmq" % "amqp-client" % "2.8.1"
)
val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
)
}
将rabbitMQ配置添加到配置文件
对于我们的示例,我们可以配置一些东西。 将消息发送到的队列,要使用的交换以及运行RabbitMQ的主机。 在实际情况下,我们将需要设置更多的配置选项