使用 Scala、Play 和 Akka 连接到 RabbitMQ

主要观点:介绍如何从 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方法绑定队列到交换器,创建接收消息的演员。
    运行代码可看到相应输出,展示消息的处理方式,但此示例非生产就绪,未包含关闭连接等代码。
阅读 6
0 条评论