主要观点:介绍如何从 Scala 连接到 RabbitMQ 以支持 AMQP 协议,以 Play Framework 2.0 为容器,使用 Akka 演员发送和接收消息,展示了发送/接收和发布/订阅两种常见场景的实现。
关键信息:
- AMQP 是高级消息队列协议,RabbitMQ 是基于 Erlang 的开源消息代理,使用 AMQP。
- 通过 sbt 在 Play 2 / Scala 项目中添加 RabbitMQ 的 Java 客户端库依赖。
- 在配置文件中配置 RabbitMQ 的相关参数,如主机、队列、交换器。
- 使用 ConnectionFactory 获取 RabbitMQ 连接,创建通道进行通信,可定时发送消息到指定队列或交换器。
- 定义发送和接收消息的演员,接收消息后进行相应处理。
重要细节: 创建新 Play 2 项目,可在 Eclipse 中导入,添加依赖后构建文件如下:
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( ) }
配置文件
application.conf
中添加 RabbitMQ 配置:#rabbit-mq configuration rabbitmq.host=localhost rabbitmq.queue=queue1 rabbitmq.exchange=exchange1
- 发送消息的代码步骤:获取连接、创建通道、声明队列、定时发送消息到演员。接收消息的演员代码:接收消息后开始监听队列,接收消息后创建新演员处理消息。
- 发布/订阅场景中,使用
PublishingActor
发送消息到交换器,setupListener
方法绑定队列到交换器,创建接收消息的演员。
运行代码可看到相应输出,展示消息的处理方式,但此示例非生产就绪,未包含关闭连接等代码。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。