Skip to content

Instantly share code, notes, and snippets.

View StarpTech's full-sized avatar

Dustin Deus StarpTech

View GitHub Profile
@StarpTech
StarpTech / replay-events.go
Last active January 4, 2020 19:20
Replay events
// Subscribe starting with most recently published value
sub, err := sc.Subscribe("eventstore.events", func(m *stan.Msg) {
fmt.Printf("Received a message: %s\n", string(m.Data))
}, stan.StartWithLastReceived())
// Receive all stored values in order
sub, err := sc.Subscribe("eventstore.events", func(m *stan.Msg) {
fmt.Printf("Received a message: %s\n", string(m.Data))
}, stan.DeliverAllAvailable())
@StarpTech
StarpTech / command_publish.go
Last active January 4, 2020 21:36
Run command and publish events
func (c *CommandBus) HandleCommand(cmd Command) {
events := c.CommandHandler.HandleCommand(cmd)
c.stan.Publish("eventstore.events", events)
}
@StarpTech
StarpTech / sub.go
Last active January 4, 2020 22:35
Event Store subscription
sub, err := sc.Subscribe("eventstore.events", func(m *stan.Msg) {
fmt.Printf("Received a message: %s\n", string(m.Data))
// your code
if err := m.Ack(); err != nil {
// event is redelivered
return
}
},
stan.maxInFlight(1),
stan.AckWait("30s"),
@StarpTech
StarpTech / tracker.go
Last active January 5, 2020 11:32
Tracker to store last processed event id
sub, err := sc.Subscribe("eventstore.events", func(m *stan.Msg) {
// check if event was already processed
if p.tracker.IsDuplicateOperation(p.name, event.ID) {
log.WithFields(eventLogFields).WithFields(subLogFields).Trace("duplicate")
if err := m.Ack(); err != nil {
log.WithFields(eventLogFields).WithFields(subLogFields).WithError(err).Error("ack duplicate event")
}
return
}
@StarpTech
StarpTech / proxy.go
Last active January 5, 2020 13:20
Proxy events to stream processors
sub, err := sc.Subscribe("eventstore.events", func(m *stan.Msg) {
// TODO check if event was already processed
stan.PublishAsync("eventstore.events.order-projection", m.Data)
stan.PublishAsync("eventstore.events.order-reactor", m.Data)
// TODO track event as processed
// ack message
if err := m.Ack(); err != nil {
log.WithFields(eventLogFields).WithFields(r.baseLogFields).WithError(err).Error("ack event")
@StarpTech
StarpTech / dump
Last active January 7, 2020 16:50
NATS message SQL table
id | version | data | timestamp
+----+---------+----------------------------------------------------------------+---------------------+
1 | 1 | {"PositionID": "Auftragsfreigabe", "PositionOrderID": "A1212"} | 1578079632531167629
1 | 2 | {"PositionID": "Abteilung A", "PositionOrderID": "A1213"} | 1578079669618870080
@StarpTech
StarpTech / event-loop-examples.js
Created May 23, 2017 10:05
Great examples to understand the differences of setImmediate, setTimeout and nextTick()
/**
* setImmediate callbacks are fired off the event loop, once per iteration in the order that they were queued.
* So on the first iteration of the event loop, callback A is fired.
* Then on the second iteration of the event loop, callback B is fired, then on the third iteration of the event loop callback C is fired, etc.
* This prevents the event loop from being blocked and allows other I/O or timer callbacks to be called in the mean time (as is the case of the 0ms timeout, which is fired on the 1st or 2nd loop iteration).
*/
setImmediate(function A() {
setImmediate(function B() {
console.log(1);
service:
enabled: true
type: LoadBalancer
# Additional annotations (e.g. for cloud provider specific config)
annotations:
load-balancer.hetzner.cloud/location: nbg1
# ensure that the load balancer communicates via private network
load-balancer.hetzner.cloud/use-private-ip: "true"
# ensures that the load balancer is not removed
load-balancer.hetzner.cloud/name: "traefik"
@StarpTech
StarpTech / docker-compose.cypress.yml
Last active December 7, 2020 03:54
Generate Github Actions Workflow to run Cypress Tests in parallel (with artifact support + Basic Auth)
version: '3.4'
services:
cypress:
container_name: 'cypress-e2e'
image: 'cypress/included:3.4.1'
working_dir: /e2e
volumes:
- .:/e2e
environment:
@StarpTech
StarpTech / redis-cache-service.js
Last active April 15, 2021 16:26
Simple Redis Cache Client for Node.js
'use strict';
const assert = require('assert');
/**
* The redis client is https://github.com/luin/ioredis
*/
/*
const redisClient = new Redis({