创建一个新的基于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微服务框架应用程序。下次我想解释一下此新应用程序中包含的代码的细节。