From 1954b062ae515d3d343d876abcfa1c3e408949c1 Mon Sep 17 00:00:00 2001 From: Alexandro Willian Hervis Date: Thu, 12 Mar 2020 08:57:19 -0300 Subject: [PATCH 1/2] PubSub pattern like a Socket --- factory/simple-factory/main.js | 24 +++++++------- pub-sub/README.MD | 46 +++++++++++++++++++++++++++ pub-sub/exemples/exemple-pub-sub.js | 44 +++++++++++++++++++++++++ pub-sub/images/publish-subscribe.png | Bin 0 -> 25455 bytes 4 files changed, 102 insertions(+), 12 deletions(-) create mode 100644 pub-sub/README.MD create mode 100644 pub-sub/exemples/exemple-pub-sub.js create mode 100644 pub-sub/images/publish-subscribe.png diff --git a/factory/simple-factory/main.js b/factory/simple-factory/main.js index 8d0f201..c2c6b67 100644 --- a/factory/simple-factory/main.js +++ b/factory/simple-factory/main.js @@ -1,21 +1,21 @@ -"use strict"; +"use strict" function Admin() { - console.log('Admin created!'); + console.log("Admin created!") } function Customer() { - console.log('Customer created!'); + console.log("Customer created!") } -var UserFactory = {}; +const UserFactory = {} UserFactory.createUser = function(type) { - if (type == 'admin') { - return new Admin(); - } else if (type == 'customer') { - return new Customer(); - } -}; + const allTypes = { + admin: Admin, + customer: Customer + } + return new allTypes[type]() +} -var customer = UserFactory.createUser('admin'); -var customer = UserFactory.createUser('customer'); \ No newline at end of file +var customer = UserFactory.createUser("admin") +var customer = UserFactory.createUser("customer") diff --git a/pub-sub/README.MD b/pub-sub/README.MD new file mode 100644 index 0000000..8ddf792 --- /dev/null +++ b/pub-sub/README.MD @@ -0,0 +1,46 @@ +# PUB SUB PATTERN + +![pub-sub](images/publish-subscribe.png) + +## Pub/sub messaging has the following benefits: + +- It decouples subsystems that still need to communicate. Subsystems can be managed independently, and messages can be properly managed even if one or more receivers are offline. + +- It increases scalability and improves responsiveness of the sender. The sender can quickly send a single message to the input channel, then return to its core processing responsibilities. The messaging infrastructure is responsible for ensuring messages are delivered to interested subscribers. + +- It improves reliability. Asynchronous messaging helps applications continue to run smoothly under increased loads and handle intermittent failures more effectively. + +- It allows for deferred or scheduled processing. Subscribers can wait to pick up messages until off-peak hours, or messages can be routed or processed according to a specific schedule. + +- It enables simpler integration between systems using different platforms, programming languages, or communication protocols, as well as between on-premises systems and applications running in the cloud. + +- It facilitates asynchronous workflows across an enterprise. + +- It improves testability. Channels can be monitored and messages can be inspected or logged as part of an overall integration test strategy. + +- It provides separation of concerns for your applications. Each application can focus on its core capabilities, while the messaging infrastructure handles everything required to reliably route messages to multiple consumers. + +## When to use this pattern + +Use this pattern when: + +- An application needs to broadcast information to a significant number of consumers. + +- An application needs to communicate with one or more independently-developed applications or services, which may use different platforms, programming languages, and communication protocols. + +- An application can send information to consumers without requiring real-time responses from the consumers. + +- The systems being integrated are designed to support an eventual consistency model for their data. + +- An application needs to communicate information to multiple consumers, which may have different availability requirements or uptime schedules than the sender. + +This pattern might not be useful when: + +- An application has only a few consumers who need significantly different information from the producing application. + +- An application requires near real-time interaction with consumers. + +### References + + - [Microsoft](https://docs.microsoft.com/en-us/azure/architecture/patterns/publisher-subscriber) + - [Youtube - Dev Pleno - PT-BR](https://www.youtube.com/watch?v=B3YqxAFs-IQ) diff --git a/pub-sub/exemples/exemple-pub-sub.js b/pub-sub/exemples/exemple-pub-sub.js new file mode 100644 index 0000000..9775e6d --- /dev/null +++ b/pub-sub/exemples/exemple-pub-sub.js @@ -0,0 +1,44 @@ +class Socket { + constructor(channels = {}) { + this.channels = channels + } + subscribe(channelName, callback) { + const currentCbs = this.channels[channelName] || [] + currentCbs.push(callback) + this.channels[channelName] = currentCbs + } + publish(channelName, message) { + if (this.channels[channelName]) { + this.channels[channelName].forEach(fn => fn(message)) + } + } + unsubscribe(channelName, callback) { + const index = (this.channels[channelName] || []).indexOf(callback) + if (index >= 0) { + this.channels[channelName].splice(index, 1) + } + } + broadcast(message) { + Object.keys(this.channels).forEach(channel => + this.publish(channel, message) + ) + } +} + +const socket = new Socket() + +socket.subscribe("test1", message => { + console.log("test1", message) +}) + +socket.subscribe("basket", message => { + console.log("basket", message) +}) + +socket.publish("test1", { + message: "just a test " +}) + +socket.broadcast({ + message: "TEST BROADCAST" +}) diff --git a/pub-sub/images/publish-subscribe.png b/pub-sub/images/publish-subscribe.png new file mode 100644 index 0000000000000000000000000000000000000000..165489d887eeeef507ef730acf89cc1427c05843 GIT binary patch literal 25455 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 literal 0 HcmV?d00001 From d5681a1b072eb6917ff899112bdf032b5136dc52 Mon Sep 17 00:00:00 2001 From: Alexandro Willian Hervis Date: Thu, 12 Mar 2020 09:03:41 -0300 Subject: [PATCH 2/2] change to single quote --- factory/simple-factory/main.js | 10 +++++----- pub-sub/exemples/exemple-pub-sub.js | 14 +++++++------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/factory/simple-factory/main.js b/factory/simple-factory/main.js index c2c6b67..5808439 100644 --- a/factory/simple-factory/main.js +++ b/factory/simple-factory/main.js @@ -1,11 +1,11 @@ -"use strict" +'use strict' function Admin() { - console.log("Admin created!") + console.log('Admin created!') } function Customer() { - console.log("Customer created!") + console.log('Customer created!') } const UserFactory = {} @@ -17,5 +17,5 @@ UserFactory.createUser = function(type) { return new allTypes[type]() } -var customer = UserFactory.createUser("admin") -var customer = UserFactory.createUser("customer") +var customer = UserFactory.createUser('admin') +var customer = UserFactory.createUser('customer') diff --git a/pub-sub/exemples/exemple-pub-sub.js b/pub-sub/exemples/exemple-pub-sub.js index 9775e6d..caedc26 100644 --- a/pub-sub/exemples/exemple-pub-sub.js +++ b/pub-sub/exemples/exemple-pub-sub.js @@ -27,18 +27,18 @@ class Socket { const socket = new Socket() -socket.subscribe("test1", message => { - console.log("test1", message) +socket.subscribe('test1', message => { + console.log('test1', message) }) -socket.subscribe("basket", message => { - console.log("basket", message) +socket.subscribe('basket', message => { + console.log('basket', message) }) -socket.publish("test1", { - message: "just a test " +socket.publish('test1', { + message: 'just a test ' }) socket.broadcast({ - message: "TEST BROADCAST" + message: 'TEST BROADCAST' })