Команда cURL POST не отвечает - PullRequest
0 голосов
/ 08 января 2019

Я узнал о Event Sourcing and CQRS и нашел хороший сериал на Youtube. Серия имеет хранилище кодов, указанное в Github . Он использует 3 модуля (barista, orders и beans), которые общаются друг с другом в распределенном режиме для управления заказами на кофе от клиентов. Инструкция по запуску предоставляется следующим образом:

  1. Запустите брокеров Apache Kafka, например, используя Docker compose: https://github.com/wurstmeister/kafka-docker. Настройте KAFKA_ADVERTISED_HOST_NAME для вашего соответствующего IP адрес.

  2. Сконфигурируйте каждый из файлов kafka.properties с bootstrap.servers=<your-IP>:9092.

  3. Сборка и запуск отдельных экземпляров. В каждом из каталогов 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

Затем я попытался POST-компонент с помощью команды,

$ curl http://localhost:8002/beans/resources/beans -i -XPOST \
      -H 'content-type: application/json' \
      -d '{"beanOrigin": "Colombia", "amount": 10}'

В этот момент терминал зависает и не дает ответа. Я смотрю на отдельные модули и вижу Dockerfile и build-run-local.sh с инструкциями по выполнению. Например, 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();

Как я уже сказал, кто-нибудь может помочь теперь выяснить, в чем дело?

...