From 39b4af14c92b6d5bb2ed5fe7157a5383b651f14a Mon Sep 17 00:00:00 2001 From: dartvandru Date: Fri, 20 Mar 2020 18:38:31 +0200 Subject: [PATCH 1/5] Getting started documentation for Node.js --- ...getting-started-eventuate-tram-nodejs.adoc | 197 ++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc diff --git a/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc b/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc new file mode 100644 index 0000000..453ccb8 --- /dev/null +++ b/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc @@ -0,0 +1,197 @@ +[[getting-started]] +== Getting started with Eventuate Tram for Node.js + + Learn how to get started with https://github.com/eventuate-tram/eventuate-tram-core[Eventuate Tram], a framework for transactional messaging. +Eventuate Tram sends and receives messages as part of a database transaction ensuring that your application atomically updates the database and publishes messages. + Currently, it supports the following databases: + + * Transaction log tailing: MySQL + +And, the following message brokers: + + * Apache Kafka + +=== See also + +* link:./about-eventuate-tram.html[Overview of EventuateTram] +* https://eventuate.io/exampleapps.html[Tram example applications] +* The https://github.com/eventuate-tram/eventuate-tram-core[Eventuate Tram Github repository] + * The https://github.com/eventuate-tram/eventuate-tram-sagas[Eventuate Tram Sagas Github repository] + * The https://www.manning.com/books/microservices-patterns[Microservices Patterns] book + + === JavaDocs + +* See the https://eventuate.io/docs/javadoc/eventuate-tram/eventuate-tram.html[Eventuate Tram JavaDocs]. + + === Project setup + +Latest library version: + + [![NPM Version][npm-image]][npm-url] + + === Transactional messages + +Eventuate Tram has APIs for sending and receiving messages as part of a database transaction. + +==== Sending messages + +Send a message using `MessageProducer`: + +[source,javascript] +---- +const { MessageProducer } = require('eventuate-tram-core-nodejs'); +const messageProducer = new MessageProducer(); +const topic = 'test-topic'; + +const payload = { message: 'Test message' }; +const message = { payload, headers: { PARTITION_ID: 0 }}; +await messageProducer.send(topic, message); +---- + + See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/MessageProducer-spec.js[sending messages]. + + ==== Consuming messages + +Receive messages using `MessageConsumer`: + +[source,javascript] +---- +const { MessageConsumer } = require('eventuate-tram-core-nodejs'); + +const messageConsumer = new MessageConsumer(); +const topic = 'test-topic'; +const subscriberId = 'test-message-consumer-sb-id'; + +await messageConsumer.subscribe({ subscriberId, topics: [ topic ], messageHandler: (message) => { + console.log(message); + return Promise.resolve(); + }}); +---- + + See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/MessageConsumer-spec.js[consuming messages]. + + === Transactional domain events + +The domain event package builds on the transaction messaging APIs. + +==== Publishing domain events + +Publish domain events using `DomainEventPublisher`: + +[source,javascript] +---- +const knex = require('knex') ({ + client: 'mysql', + connection: { ... }, + debug: true, + pool: { min: 0, max: 10 } +}); + +const { DefaultChannelMapping, MessageProducer, DomainEventPublisher } = require('eventuate-tram-core-nodejs'); +const channelMapping = new DefaultChannelMapping(new Map()); +const messageProducer = new MessageProducer({ channelMapping }); +const domainEventPublisher = new DomainEventPublisher({ messageProducer }); +let extraHeaders = {}; + +const aggregateType = 'Account'; +const aggregateId = 'Fake_aggregate_id'; +const events = [ + { amount: 10, _type: 'CreditApproved' }, + { amount: 20, _type: 'CreditApproved' }, + { amount: 30, _type: 'CreditApproved' }, + { amount: 40, _type: 'CreditApproved' }, +]; + +const trx = await knex.transaction(); +await domainEventPublisher.publish(aggregateType, aggregateId, events, { extraHeaders, trx }); +await trx.commit(); +---- + + See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/DomainEventPublisher-spec.js[Publishing events]. + + + ==== Consuming domain events + +First, define `DomainEventHandlers`: + +[source,javascript] +---- + +const aggregateType = 'Account'; +const eventType = 'CreditApproved'; + +const domainEventHandlers = { + [aggregateType]: { + [eventType]: async (event) => { + console.log(event); + } + } +}; +---- + + Second, configure a `DomainEventDispatcher`: + +[source,javascript] +---- +const { MessageConsumer, DefaultDomainEventNameMapping, DomainEventDispatcher } = require('eventuate-tram-core-nodejs'); + +const domainEventNameMapping = new DefaultDomainEventNameMapping(); +const messageConsumer = new MessageConsumer(); +const eventDispatcherId = 'test-domain-event-dispatcher-id'; + +domainEventDispatcher = new DomainEventDispatcher({ eventDispatcherId, + domainEventHandlers, + messageConsumer, + domainEventNameMapping +}); +await domainEventDispatcher.initialize(); +---- + + See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/DomainEventDispatcher-spec.js[Dispatching domain events]. + + === Configuring the transport + +===== Setup environment variables + +EVENTUATE_TRAM_KAFKA_BOOTSTRAP_SERVERS=localhost:9092 +EVENTUATE_TRAM_MYSQL_HOST=localhost +EVENTUATE_TRAM_MYSQL_PORT=3306 +EVENTUATE_TRAM_MYSQL_DATABASE=eventuate +EVENTUATE_TRAM_MYSQL_USERNAME=mysqluser +EVENTUATE_TRAM_MYSQL_PASSWORD=mysqlpw + + === Running the CDC service + +In addition to a database and message broker, you will need to run the link:./cdc-configuration.html[Eventuate Tram CDC] service. +It reads events inserted into the database and publishes them to the message broker. + It is written using Spring Boot. + The easiest way to run this service during development is to use Docker Compose. + + The https://github.com/eventuate-tram/eventuate-tram-core-examples-basic[Eventuate Tram Code Basic examples] project has an example https://github.com/eventuate-tram/eventuate-tram-core-examples-basic/blob/master/docker-compose.yml[docker-compose.yml file]. + + [source,yaml] +---- + cdcservice: +image: eventuateio/eventuate-tram-cdc-mysql-service:0.4.0.RELEASE +ports: + - "8099:8080" +depends_on: + - mysql + - kafka + - zookeeper +environment: + SPRING_DATASOURCE_URL: jdbc:mysql://mysql/eventuate + SPRING_DATASOURCE_USERNAME: mysqluser +SPRING_DATASOURCE_PASSWORD: mysqlpw +SPRING_DATASOURCE_DRIVER_CLASS_NAME: com.mysql.jdbc.Driver +EVENTUATELOCAL_KAFKA_BOOTSTRAP_SERVERS: kafka:9092 +EVENTUATELOCAL_ZOOKEEPER_CONNECTION_STRING: zookeeper:2181 +EVENTUATELOCAL_CDC_DB_USER_NAME: root +EVENTUATELOCAL_CDC_DB_PASSWORD: rootpassword +EVENTUATELOCAL_CDC_READER_NAME: MySqlReader +EVENTUATELOCAL_CDC_OFFSET_STORE_KEY: MySqlBinlog +EVENTUATELOCAL_CDC_MYSQL_BINLOG_CLIENT_UNIQUE_ID: 1234567890 +EVENTUATELOCAL_CDC_READ_OLD_DEBEZIUM_DB_OFFSET_STORAGE_TOPIC: "false" +---- + + For more information, please see link:./cdc-configuration.html[Eventuate Tram CDC] From ce9b68f59d7722a487920672d8d6b43795b13ec0 Mon Sep 17 00:00:00 2001 From: dartvandru Date: Fri, 20 Mar 2020 18:50:07 +0200 Subject: [PATCH 2/5] Getting started documentation for Node.js: fixed formatting errors --- ...getting-started-eventuate-tram-nodejs.adoc | 128 +++++++++--------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc b/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc index 453ccb8..486e874 100644 --- a/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc +++ b/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc @@ -1,35 +1,35 @@ [[getting-started]] == Getting started with Eventuate Tram for Node.js - Learn how to get started with https://github.com/eventuate-tram/eventuate-tram-core[Eventuate Tram], a framework for transactional messaging. +Learn how to get started with https://github.com/eventuate-tram/eventuate-tram-core[Eventuate Tram], a framework for transactional messaging. Eventuate Tram sends and receives messages as part of a database transaction ensuring that your application atomically updates the database and publishes messages. - Currently, it supports the following databases: +Currently, it supports the following databases: - * Transaction log tailing: MySQL +* Transaction log tailing: MySQL And, the following message brokers: - * Apache Kafka +* Apache Kafka === See also * link:./about-eventuate-tram.html[Overview of EventuateTram] * https://eventuate.io/exampleapps.html[Tram example applications] * The https://github.com/eventuate-tram/eventuate-tram-core[Eventuate Tram Github repository] - * The https://github.com/eventuate-tram/eventuate-tram-sagas[Eventuate Tram Sagas Github repository] - * The https://www.manning.com/books/microservices-patterns[Microservices Patterns] book +* The https://github.com/eventuate-tram/eventuate-tram-sagas[Eventuate Tram Sagas Github repository] +* The https://www.manning.com/books/microservices-patterns[Microservices Patterns] book - === JavaDocs +=== JavaDocs * See the https://eventuate.io/docs/javadoc/eventuate-tram/eventuate-tram.html[Eventuate Tram JavaDocs]. - === Project setup +=== Project setup Latest library version: - [![NPM Version][npm-image]][npm-url] +[![NPM Version][npm-image]][npm-url] - === Transactional messages +=== Transactional messages Eventuate Tram has APIs for sending and receiving messages as part of a database transaction. @@ -48,9 +48,9 @@ const message = { payload, headers: { PARTITION_ID: 0 }}; await messageProducer.send(topic, message); ---- - See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/MessageProducer-spec.js[sending messages]. +See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/MessageProducer-spec.js[sending messages]. - ==== Consuming messages +==== Consuming messages Receive messages using `MessageConsumer`: @@ -63,14 +63,14 @@ const topic = 'test-topic'; const subscriberId = 'test-message-consumer-sb-id'; await messageConsumer.subscribe({ subscriberId, topics: [ topic ], messageHandler: (message) => { - console.log(message); - return Promise.resolve(); - }}); + console.log(message); + return Promise.resolve(); +}}); ---- - See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/MessageConsumer-spec.js[consuming messages]. +See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/MessageConsumer-spec.js[consuming messages]. - === Transactional domain events +=== Transactional domain events The domain event package builds on the transaction messaging APIs. @@ -107,10 +107,10 @@ await domainEventPublisher.publish(aggregateType, aggregateId, events, { extraHe await trx.commit(); ---- - See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/DomainEventPublisher-spec.js[Publishing events]. +See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/DomainEventPublisher-spec.js[Publishing events]. - ==== Consuming domain events +==== Consuming domain events First, define `DomainEventHandlers`: @@ -121,15 +121,15 @@ const aggregateType = 'Account'; const eventType = 'CreditApproved'; const domainEventHandlers = { - [aggregateType]: { - [eventType]: async (event) => { - console.log(event); - } - } -}; + [aggregateType]: { + [eventType]: async (event) => { + console.log(event); + } + } + }; ---- - Second, configure a `DomainEventDispatcher`: +Second, configure a `DomainEventDispatcher`: [source,javascript] ---- @@ -140,58 +140,58 @@ const messageConsumer = new MessageConsumer(); const eventDispatcherId = 'test-domain-event-dispatcher-id'; domainEventDispatcher = new DomainEventDispatcher({ eventDispatcherId, - domainEventHandlers, - messageConsumer, - domainEventNameMapping + domainEventHandlers, + messageConsumer, + domainEventNameMapping }); await domainEventDispatcher.initialize(); ---- - See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/DomainEventDispatcher-spec.js[Dispatching domain events]. +See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/DomainEventDispatcher-spec.js[Dispatching domain events]. - === Configuring the transport +=== Configuring the transport -===== Setup environment variables +===== Setup environment variables: -EVENTUATE_TRAM_KAFKA_BOOTSTRAP_SERVERS=localhost:9092 -EVENTUATE_TRAM_MYSQL_HOST=localhost -EVENTUATE_TRAM_MYSQL_PORT=3306 -EVENTUATE_TRAM_MYSQL_DATABASE=eventuate -EVENTUATE_TRAM_MYSQL_USERNAME=mysqluser -EVENTUATE_TRAM_MYSQL_PASSWORD=mysqlpw + EVENTUATE_TRAM_KAFKA_BOOTSTRAP_SERVERS=localhost:9092 + EVENTUATE_TRAM_MYSQL_HOST=localhost + EVENTUATE_TRAM_MYSQL_PORT=3306 + EVENTUATE_TRAM_MYSQL_DATABASE=eventuate + EVENTUATE_TRAM_MYSQL_USERNAME=mysqluser + EVENTUATE_TRAM_MYSQL_PASSWORD=mysqlpw - === Running the CDC service +=== Running the CDC service In addition to a database and message broker, you will need to run the link:./cdc-configuration.html[Eventuate Tram CDC] service. It reads events inserted into the database and publishes them to the message broker. - It is written using Spring Boot. - The easiest way to run this service during development is to use Docker Compose. +It is written using Spring Boot. +The easiest way to run this service during development is to use Docker Compose. - The https://github.com/eventuate-tram/eventuate-tram-core-examples-basic[Eventuate Tram Code Basic examples] project has an example https://github.com/eventuate-tram/eventuate-tram-core-examples-basic/blob/master/docker-compose.yml[docker-compose.yml file]. +The https://github.com/eventuate-tram/eventuate-tram-core-examples-basic[Eventuate Tram Code Basic examples] project has an example https://github.com/eventuate-tram/eventuate-tram-core-examples-basic/blob/master/docker-compose.yml[docker-compose.yml file]. - [source,yaml] +[source,yaml] ---- - cdcservice: -image: eventuateio/eventuate-tram-cdc-mysql-service:0.4.0.RELEASE -ports: - - "8099:8080" -depends_on: - - mysql - - kafka - - zookeeper -environment: - SPRING_DATASOURCE_URL: jdbc:mysql://mysql/eventuate +cdcservice: + image: eventuateio/eventuate-tram-cdc-mysql-service:0.4.0.RELEASE + ports: + - "8099:8080" + depends_on: + - mysql + - kafka + - zookeeper + environment: + SPRING_DATASOURCE_URL: jdbc:mysql://mysql/eventuate SPRING_DATASOURCE_USERNAME: mysqluser -SPRING_DATASOURCE_PASSWORD: mysqlpw -SPRING_DATASOURCE_DRIVER_CLASS_NAME: com.mysql.jdbc.Driver -EVENTUATELOCAL_KAFKA_BOOTSTRAP_SERVERS: kafka:9092 -EVENTUATELOCAL_ZOOKEEPER_CONNECTION_STRING: zookeeper:2181 -EVENTUATELOCAL_CDC_DB_USER_NAME: root -EVENTUATELOCAL_CDC_DB_PASSWORD: rootpassword -EVENTUATELOCAL_CDC_READER_NAME: MySqlReader -EVENTUATELOCAL_CDC_OFFSET_STORE_KEY: MySqlBinlog -EVENTUATELOCAL_CDC_MYSQL_BINLOG_CLIENT_UNIQUE_ID: 1234567890 -EVENTUATELOCAL_CDC_READ_OLD_DEBEZIUM_DB_OFFSET_STORAGE_TOPIC: "false" + SPRING_DATASOURCE_PASSWORD: mysqlpw + SPRING_DATASOURCE_DRIVER_CLASS_NAME: com.mysql.jdbc.Driver + EVENTUATELOCAL_KAFKA_BOOTSTRAP_SERVERS: kafka:9092 + EVENTUATELOCAL_ZOOKEEPER_CONNECTION_STRING: zookeeper:2181 + EVENTUATELOCAL_CDC_DB_USER_NAME: root + EVENTUATELOCAL_CDC_DB_PASSWORD: rootpassword + EVENTUATELOCAL_CDC_READER_NAME: MySqlReader + EVENTUATELOCAL_CDC_OFFSET_STORE_KEY: MySqlBinlog + EVENTUATELOCAL_CDC_MYSQL_BINLOG_CLIENT_UNIQUE_ID: 1234567890 + EVENTUATELOCAL_CDC_READ_OLD_DEBEZIUM_DB_OFFSET_STORAGE_TOPIC: "false" ---- - For more information, please see link:./cdc-configuration.html[Eventuate Tram CDC] +For more information, please see link:./cdc-configuration.html[Eventuate Tram CDC] From e99d0284903da1a2c0322cd93cb6f8edea402c65 Mon Sep 17 00:00:00 2001 From: dartvandru Date: Tue, 24 Mar 2020 01:26:28 +0200 Subject: [PATCH 3/5] Getting started documentation for Node.js: examples for channel mapping and domain event mapping --- ...getting-started-eventuate-tram-nodejs.adoc | 106 +++++++++++++----- 1 file changed, 81 insertions(+), 25 deletions(-) diff --git a/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc b/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc index 486e874..f52fa50 100644 --- a/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc +++ b/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc @@ -39,13 +39,16 @@ Send a message using `MessageProducer`: [source,javascript] ---- +const knex = require('../lib/mysql/knex'); const { MessageProducer } = require('eventuate-tram-core-nodejs'); const messageProducer = new MessageProducer(); const topic = 'test-topic'; const payload = { message: 'Test message' }; const message = { payload, headers: { PARTITION_ID: 0 }}; -await messageProducer.send(topic, message); +const trx = await knex.transaction(); +await messageProducer.send(topic, message, trx); +await trx.commit(); ---- See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/MessageProducer-spec.js[sending messages]. @@ -63,8 +66,8 @@ const topic = 'test-topic'; const subscriberId = 'test-message-consumer-sb-id'; await messageConsumer.subscribe({ subscriberId, topics: [ topic ], messageHandler: (message) => { - console.log(message); - return Promise.resolve(); + console.log(message); + return Promise.resolve(); }}); ---- @@ -80,30 +83,57 @@ Publish domain events using `DomainEventPublisher`: [source,javascript] ---- -const knex = require('knex') ({ - client: 'mysql', - connection: { ... }, - debug: true, - pool: { min: 0, max: 10 } -}); +const knex = require('../lib/mysql/knex'); + +const { MessageProducer, DomainEventPublisher } = require('eventuate-tram-core-nodejs'); +const messageProducer = new MessageProducer(); +const domainEventPublisher = new DomainEventPublisher({ messageProducer }); + +const aggregateType = 'Account'; +const aggregateId = 'Fake_aggregate_id'; +const events = [ + { amount: 10, _type: 'CreditApproved' }, + { amount: 20, _type: 'CreditApproved' }, + { amount: 30, _type: 'CreditApproved' }, + { amount: 40, _type: 'CreditApproved' }, +]; + +const trx = await knex.transaction(); +await domainEventPublisher.publish(aggregateType, aggregateId, events, { trx }); +await trx.commit(); +---- -const { DefaultChannelMapping, MessageProducer, DomainEventPublisher } = require('eventuate-tram-core-nodejs'); -const channelMapping = new DefaultChannelMapping(new Map()); -const messageProducer = new MessageProducer({ channelMapping }); +And with custom channel mapping: +[source,javascript] +---- +const knex = require('../lib/mysql/knex'); +const { MessageProducer, DomainEventPublisher } = require('eventuate-tram-core-nodejs'); + +class CustomChannelMapping { + constructor() { + // map "CustomerAccount" aggregate type to "Account" + this.mappings = new Map([['CustomerAccount', 'Account']]); + } + transform(channel) { + const mappingChannel = this.mappings.get(channel); + return mappingChannel || channel; + } +} + +const messageProducer = new MessageProducer({ channelMapping: new CustomChannelMapping() }); const domainEventPublisher = new DomainEventPublisher({ messageProducer }); -let extraHeaders = {}; const aggregateType = 'Account'; const aggregateId = 'Fake_aggregate_id'; const events = [ - { amount: 10, _type: 'CreditApproved' }, - { amount: 20, _type: 'CreditApproved' }, - { amount: 30, _type: 'CreditApproved' }, - { amount: 40, _type: 'CreditApproved' }, + { amount: 10, _type: 'CreditApproved' }, + { amount: 20, _type: 'CreditApproved' }, + { amount: 30, _type: 'CreditApproved' }, + { amount: 40, _type: 'CreditApproved' }, ]; const trx = await knex.transaction(); -await domainEventPublisher.publish(aggregateType, aggregateId, events, { extraHeaders, trx }); +await domainEventPublisher.publish(aggregateType, aggregateId, events, { trx }); await trx.commit(); ---- @@ -121,28 +151,54 @@ const aggregateType = 'Account'; const eventType = 'CreditApproved'; const domainEventHandlers = { - [aggregateType]: { - [eventType]: async (event) => { + [aggregateType]: { + [eventType]: async (event) => { console.log(event); - } } - }; + } + }; ---- Second, configure a `DomainEventDispatcher`: [source,javascript] ---- -const { MessageConsumer, DefaultDomainEventNameMapping, DomainEventDispatcher } = require('eventuate-tram-core-nodejs'); +const { MessageConsumer, DomainEventDispatcher } = require('eventuate-tram-core-nodejs'); + +const messageConsumer = new MessageConsumer(); +const eventDispatcherId = 'test-domain-event-dispatcher-id'; + +domainEventDispatcher = new DomainEventDispatcher({ eventDispatcherId, domainEventHandlers, messageConsumer }); +await domainEventDispatcher.initialize(); +---- + +Same with custom domain event mapping: + +[source,javascript] +---- +const { MessageConsumer, DomainEventDispatcher } = require('eventuate-tram-core-nodejs'); + +class CustomerDomainEventNameMapping { + constructor() { + this.mappings = { + [aggregateType]: new Map([[eventType, 'CustomerCreditApproved']]) + }; + } + externalEventTypeToEvent(aggregateType, eventTypeHeader) { + if (this.mappings[aggregateType]) { + return this.mappings[aggregateType].get(eventTypeHeader); + } + throw new Error('Unknown aggregate type'); + } +} -const domainEventNameMapping = new DefaultDomainEventNameMapping(); const messageConsumer = new MessageConsumer(); const eventDispatcherId = 'test-domain-event-dispatcher-id'; domainEventDispatcher = new DomainEventDispatcher({ eventDispatcherId, domainEventHandlers, messageConsumer, - domainEventNameMapping + domainEventNameMapping: new CustomerDomainEventNameMapping() }); await domainEventDispatcher.initialize(); ---- From cf62df4c78afad43a84649bdb46b914d87fa9310 Mon Sep 17 00:00:00 2001 From: dartvandru Date: Tue, 24 Mar 2020 22:14:48 +0200 Subject: [PATCH 4/5] Getting started documentation for Node.js: links to examples, show npm version --- ...getting-started-eventuate-tram-nodejs.adoc | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc b/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc index f52fa50..3bebf3f 100644 --- a/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc +++ b/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc @@ -27,7 +27,7 @@ And, the following message brokers: Latest library version: -[![NPM Version][npm-image]][npm-url] +[![npm version](https://badge.fury.io/js/eventuate-tram-core-nodejs.svg)](http://npmjs.com/package/eventuate-tram-core-nodejs) === Transactional messages @@ -44,14 +44,15 @@ const { MessageProducer } = require('eventuate-tram-core-nodejs'); const messageProducer = new MessageProducer(); const topic = 'test-topic'; -const payload = { message: 'Test message' }; -const message = { payload, headers: { PARTITION_ID: 0 }}; +const payload = { message: 'Test kafka subscription' }; +const message = { payload, headers: { PARTITION_ID: 0, DATE: new Date().getTime() }}; + const trx = await knex.transaction(); await messageProducer.send(topic, message, trx); await trx.commit(); ---- -See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/MessageProducer-spec.js[sending messages]. +See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/MessageProducer-spec.js#L34-L39[sending messages]. ==== Consuming messages @@ -65,13 +66,10 @@ const messageConsumer = new MessageConsumer(); const topic = 'test-topic'; const subscriberId = 'test-message-consumer-sb-id'; -await messageConsumer.subscribe({ subscriberId, topics: [ topic ], messageHandler: (message) => { - console.log(message); - return Promise.resolve(); -}}); +await messageConsumer.subscribe({ subscriberId, topics: [topic], messageHandler: async message => resolve() }); ---- -See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/MessageConsumer-spec.js[consuming messages]. +See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/MessageConsumer-spec.js#L39[consuming messages]. === Transactional domain events @@ -137,7 +135,7 @@ await domainEventPublisher.publish(aggregateType, aggregateId, events, { trx }); await trx.commit(); ---- -See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/DomainEventPublisher-spec.js[Publishing events]. +See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/DomainEventPublisher-spec.js#L65-L81[Publishing events]. ==== Consuming domain events @@ -203,7 +201,7 @@ domainEventDispatcher = new DomainEventDispatcher({ eventDispatcherId, await domainEventDispatcher.initialize(); ---- -See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/DomainEventDispatcher-spec.js[Dispatching domain events]. +See this example of https://github.com/eventuate-tram/eventuate-tram-core-nodejs/blob/master/test/DomainEventDispatcher-spec.js#L65-L84[Dispatching domain events]. === Configuring the transport From 68df83b7cb02223f1386163fe5cc35e0b70e026b Mon Sep 17 00:00:00 2001 From: Valentin Andrushchenko <10773827+dartvandru@users.noreply.github.com> Date: Tue, 24 Mar 2020 22:25:24 +0200 Subject: [PATCH 5/5] Update getting-started-eventuate-tram-nodejs.adoc Getting started documentation for Node.js: fixed npm version image --- src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc b/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc index 3bebf3f..a867a8f 100644 --- a/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc +++ b/src/docs/asciidoc/getting-started-eventuate-tram-nodejs.adoc @@ -27,7 +27,7 @@ And, the following message brokers: Latest library version: -[![npm version](https://badge.fury.io/js/eventuate-tram-core-nodejs.svg)](http://npmjs.com/package/eventuate-tram-core-nodejs) +image::https://badge.fury.io/js/eventuate-tram-core-nodejs.svg[link="http://npmjs.com/package/eventuate-tram-core-nodejs"] === Transactional messages