java - cURL POST 命令无响应
问题描述
我正在学习Event Sourcing and CQRS
并在 Youtube 上找到一个不错的视频系列。该系列在Github中有一个代码存储库。它使用 3 个模块(barista
、orders
和beans
)以分布式方式相互通信,以管理来自客户的咖啡订单。运行指令提供如下,
启动 Apache Kafka 代理,例如使用 Docker compose:https ://github.com/wurstmeister/kafka-docker 。将 配置
KAFKA_ADVERTISED_HOST_NAME
为您相应的 IP 地址。
kafka.properties
使用bootstrap.servers=<your-IP>:9092
. _构建并运行各个实例。在每个
orders/
,beans/
和barista/
目录上,执行build-run-local.sh
. 这将构建 Gradle 项目、构建 Docker 映像并启动给定服务的新实例。
我无缝地遵循这些步骤。在构建并运行各个实例之后,我执行命令,
$ curl http://localhost:8002/beans/resources/beans -i
HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: application/json
Content-Length: 2
Date: Tue, 08 Jan 2019 13:16:12 GMT
然后,我尝试使用该命令发布一个 bean,
$ curl http://localhost:8002/beans/resources/beans -i -XPOST \
-H 'content-type: application/json' \
-d '{"beanOrigin": "Colombia", "amount": 10}'
此时,终端被挂起并且没有响应。我查看了各个模块并查看了Dockerfile
和build-run-local.sh
with 执行指令。例如,下面提供Dockerfile
了beans
模块的,
$ cat Dockerfile
FROM sdaschner/wildfly:javaee8-kafka-b1
COPY build/libs/beans.war $DEPLOYMENT_DIR
提供beans/build-run-local.sh
,
$ cat build-run-local.sh
#!/bin/bash
cd ${0%/*}
set -eu
gradle build
docker build --rm -t scalable-coffee-shop-beans:1 .
docker run --rm --name beans -p 8002:8080 scalable-coffee-shop-beans:1
当我运行文件时,我得到输出(初始 lnes),
$ ./build-run-local.sh
BUILD SUCCESSFUL in 0s
5 actionable tasks: 5 up-to-date
Sending build context to Docker daemon 310.3kB
Step 1/2 : FROM sdaschner/wildfly:javaee8-kafka-b1
---> 7a638cd4a3c8
Step 2/2 : COPY build/libs/beans.war $DEPLOYMENT_DIR
---> Using cache
---> ef4901bbea66
Successfully built ef4901bbea66
Successfully tagged scalable-coffee-shop-beans:1
=========================================================================
JBoss Bootstrap Environment
JBOSS_HOME: /opt/jboss/wildfly
JAVA: /usr/lib/jvm/java/bin/java
JAVA_OPTS: -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
我怀疑 POST 命令被挂起,因为我可能需要更多我缺少的配置。例如,我没有配置任何$DEPLOYMENT_DIR
,JBOSS_HOME
或JAVA_OPTS
前面提到的。
我承认我对Docker
. 但是,我发现这是执行Docker
文件信息的命令,
# get 2 instructions from the `Dockerfile` and excutes them.
$ docker build --rm -t scalable-coffee-shop-beans:1 .
Sending build context to Docker daemon 310.3kB
Step 1/2 : FROM sdaschner/wildfly:javaee8-kafka-b1
---> 7a638cd4a3c8
Step 2/2 : COPY build/libs/beans.war $DEPLOYMENT_DIR
---> Using cache
---> ef4901bbea66
Successfully built ef4901bbea66
Successfully tagged scalable-coffee-shop-beans:1
谁能帮我正确运行该应用程序?
更新:
我遵循评论中的建议并放置日志消息。我得到的是:
03:26:12,271 INFO [com.sebastian_daschner.scalable_coffee_shop.beans.boundary.BeansResource] (default task-1) Bean origin = Colombia , Amount = 10
03:26:12,273 INFO [com.sebastian_daschner.scalable_coffee_shop.beans.boundary.BeanCommandService] (default task-1) Bean origin = Colombia , Amount = 1
因此,似乎com.sebastian_daschner.scalable_coffee_shop.beans.boundary.BeanCommandService
确实正确获取了信息并调用了类的方法,com.sebastian_daschner.scalable_coffee_shop.events.control.EventProducer
如下所示,
public void storeBeans(final String beanOrigin, final int amount) {
LOGGER.log(Level.INFO, "Bean origin = " + beanOrigin +
" " + ", Amount = " + amount);
eventProducer.publish(new BeansStored(beanOrigin, amount));
}
在里面EventProducer
,它调用publish
下面提供的方法,
public void publish(CoffeeEvent... events) {
try {
LOGGER.log(Level.INFO, "Events = " + Arrays.toString(events));
producer.beginTransaction();
send(events);
producer.commitTransaction();
} catch (ProducerFencedException e) {
LOGGER.log(Level.SEVERE, e.toString(), e);
producer.close();
} catch (KafkaException e) {
LOGGER.log(Level.SEVERE, e.toString(), e);
producer.abortTransaction();
}
}
此时,我没有从代码中得到任何日志,
LOGGER.log(Level.INFO, "Events = " + Arrays.toString(events));
我假设它与 Kafka 有关,并且下面的代码不执行:
producer.beginTransaction();
send(events);
producer.commitTransaction();
正如我准确指出的那样,现在有没有人可以帮助找出问题所在?
解决方案
推荐阅读
- python - mongodb python 获取数据库的用户
- php - 如何解析json中的对象
- c++ - 制作链表输入功能后获取输入的问题
- r - 在 Manjaro (Arch) Linux 中运行 NLRX (NetLogo) 时出错
- python - 如何在 Tensorflow 2 中的嵌入层之后放置 Conv1D 层?
- javascript - 在文本框中添加小数点和千位分隔符
- arrays - 加入在 R 的传单中制作的两张地图
- wordpress - Wordpress /support/ slug 模拟 /blog/
- python - 如何对我的 python 文件执行“python_file.py -something”?不知道如何措辞以找到涵盖它的帖子
- c++ - 有人可以解释为什么这段代码的输出是 3 而不是 4?