创建一个新的基于Lagom微服务框架的应用程序

记下使用Lagom微服务框架创建新应用程序的方法。

前提条件 tí

    • Java 8

 

    sbt 1.2.1+

创建新的应用程序

可以使用Giter8模板创建一个使用Lagom的新应用程序。在这里,我们将模板参数作为命令行参数进行指定,但如果不指定,则可以根据对话指定模板参数。

$ sbt new lagom/lagom-scala.g8 \
  --name=Hello \
  --organization=com.example \
  --version=1.0-SNAPSHOT \
  --package=com.example.hello

启动应用程序

在创建的应用程序根目录中启动sbt。在依赖处理等工作完成并出现交互式Shell时,执行runAll命令。与定义的服务相关联的中间件也将被启动。当屏幕上显示绿色文字(Services started, …)时,表示应用程序已经启动完成。

$ cd hello
$ sbt
sbt:hello> runAll
...
[info] (Services started, press enter to stop and go back to the console...)

使用手机应用

当向 /api/hello/:id 的终端提交 GET 请求时,将返回问候语“你好,{:id}!”。

$ curl -i -X GET 127.0.0.1:9000/api/hello/Alice
HTTP/1.1 200 OK
Date: Sat, 02 Feb 2019 07:30:43 GMT
Server: akka-http/10.0.15
Content-Type: text/plain
Content-Length: 13

Hello, Alice!

当向 /api/hello/:id 端点发送带有 JSON 的 POST 请求时,可以将 Hello 的问候更改为指定的内容。如果指定的 ID 为 Alice,那么只有在 ID 为 Alice 时才会返回指定的问候。

$ curl -i -X POST 127.0.0.1:9000/api/hello/Alice \
       -H 'Content-Type: application/json' \
       -d '{ "message": "Hi" }'
HTTP/1.1 200 OK
Date: Sat, 02 Feb 2019 07:31:23 GMT
Server: akka-http/10.0.15
Content-Length: 0
$ curl -i -X GET 127.0.0.1:9000/api/hello/Alice
HTTP/1.1 200 OK
Date: Sat, 02 Feb 2019 07:46:00 GMT
Server: akka-http/10.0.15
Content-Type: text/plain
Content-Length: 10

Hi, Alice!
$ curl -i -X GET 127.0.0.1:9000/api/hello/Bob
HTTP/1.1 200 OK
Date: Sat, 02 Feb 2019 07:48:23 GMT
Server: akka-http/10.0.15
Content-Type: text/plain
Content-Length: 11

Hello, Bob!

使用 wscat 连接到 /stream 终点后,可以通过 WebSocket 发送问候语。

$ wscat -c 127.0.0.1:9000/stream
connected (press CTRL+C to quit)
> Alice
< Hi, Alice!
> Bob
< Hello, Bob!
>

查看留言

当成功发送 POST 请求到 /api/hello/:id 端点后,会向代理(Kafka)发布 greetings 主题的消息。遗憾的是,示例代码中没有包含订阅 greetings 主题的服务,因此可以使用 kafkacat 工具来确认消息是否发布成功。

使用 kafkacat 连接到与 runAll 一起启动的 Kafka 服务器。

$ kafkacat -b 127.0.0.1:9092 -t greetings
% Auto-selecting Consumer mode (use -P or -C to override)
% Reached end of topic greetings [0] at offset 0

在另一个终端中,向/api/hello/:id端点发送一个POST请求,而不是使用kafkacat。

$ curl -i -X POST 127.0.0.1:9000/api/hello/Alice \
       -H 'Content-Type: application/json' \
       -d '{ "message": "Hi" }'
HTTP/1.1 200 OK
Date: Thu, 18 Jul 2019 15:12:59 GMT
Server: akka-http/10.1.8
Content-Length: 0

若这样做,kafkacat 将会输出以下消息。

$ kafkacat -b 127.0.0.1:9092 -t greetings
% Auto-selecting Consumer mode (use -P or -C to override)
% Reached end of topic greetings [0] at offset 0
{"name":"Alice","message":"Hi"}
% Reached end of topic greetings [0] at offset 1

停止应用程序

在运行了 `runAll` 的 sbt shell 中按下 Enter 键将停止应用程序。

初始化Cassandra数据库

如果将选定的问候语设置为开发模式下启动的Cassandra中的永久存储,则可以在启动时初始化Cassandra数据库,只需将lagomCassandraCleanOnStart设置键设为true。

$ sbt
sbt:hello> set lagomCassandraCleanOnStart in ThisBuild := true
sbt:hello> runAll
...
[info] (Services started, press enter to stop and go back to the console...)

初始化 Kafka 日志

当发布的消息持久化到用于开发的Kafka中时,可以设置lagomKafkaCleanOnStart属性为true,使得在启动时Kafka的日志(消息)会被初始化。

$ sbt
sbt:hello> set lagomKafkaCleanOnStart in ThisBuild := true
sbt:hello> runAll
...
[info] (Services started, press enter to stop and go back to the console...)

下面是一种可能的中文释义:
这次解释了如何创建一个新的Lagom微服务框架应用程序。下次我想解释一下此新应用程序中包含的代码的细节。

广告
将在 10 秒后关闭
bannerAds