From 6391d8a157190fe3f679bcf48fd14506fa5bed97 Mon Sep 17 00:00:00 2001
From: Lucas dos Santos Alves <30706052+lucasdsalves@users.noreply.github.com>
Date: Tue, 16 May 2023 21:56:32 -0300
Subject: [PATCH 1/3] feat: :memo: add blog post introduction to rabbitmq
---
data/blog/an-introduction-to-rabbitmq.mdx | 89 ++++++++++++++++++
.../images/posts/direct-exc-rabbitmq.png | Bin 0 -> 17795 bytes
2 files changed, 89 insertions(+)
create mode 100644 data/blog/an-introduction-to-rabbitmq.mdx
create mode 100644 public/static/images/posts/direct-exc-rabbitmq.png
diff --git a/data/blog/an-introduction-to-rabbitmq.mdx b/data/blog/an-introduction-to-rabbitmq.mdx
new file mode 100644
index 0000000..860e619
--- /dev/null
+++ b/data/blog/an-introduction-to-rabbitmq.mdx
@@ -0,0 +1,89 @@
+---
+title: An introduction to RabbitMQ
+date: '2023-05-16'
+tags: ['#rabbitmq']
+draft: false
+summary: A brief overview of RabbitMQ's main concepts
+images: []
+layout: PostLayout
+canonicalUrl:
+---
+
+## What is RabbitMQ?
+
+[RabbitMQ](https://www.rabbitmq.com/) is an open-source message-broker software written in Erlang.
+
+It's called Rabbit because it was originally developed by Rabbit Technologies Ltd. 🐇
+
+- It is very reliable and used by a large number of companies
+- Fast and powerful with in-memory processing
+- It implements multiple communication protocols such as AMQP, MQTT, STOMP e HTTP
+- It's a platform-agnostic solution
+
+## How does it work?
+
+Essentially, here are some core players in RabbitMQ.
+
+- **Producer** - application who sends the message
+- **Consumer** - application that receives the message
+- **Message** - information that is sent from a producer to a consumer
+- **Exchange** - message routing agents
+- **Queue** - a sequential data structure that is a medium through which messages are transferred and stored
+
+A **binding** is like a link you set up to bind a queue to an exchange.
+
+The **routing key** is a message attribute the exchange looks at when deciding how the message will be routed to queues depending on the exchange type.
+
+### Basic flow
+
+A producer sends a message to an exchange.
+An exchange is responsible for routing the message to different queues with the help of header attributes, bindings, and routing keys.
+The consumer can be subscribed to a queue and receive the message.
+
+
Producer -> Exchange -> Queue -> Consumer
+
+## Types of exchange
+
+- **Direct** - route messages to queues based on a routing key
+- **Fanout** - route messages to all queues that are bound to it
+- **Topic** - route messages to queues that match a wanted pattern
+- **Header** - route messages based on header arguments
+
+![Direct exchange](/static/images/posts/direct-exc-rabbitmq.png)
+## Queue The queue works in FIFO (*First In, First Out*) pattern.
+
+There are some important [queue properties](https://www.rabbitmq.com/queues.html#properties):
+
+- **Durable** - if the queue must be saved even after the broker restart (disk persistence or just in memory)
+- **Autodelete** - remove the queue automatically when the consumer disconnects
+- **Expiry** - defines the time that there are no messages or clients consuming and when this time is reached, the queue is deleted
+- **Message TTL** - 'message time to live', if the message gets to it and it is not consumer, then it gets excluded
+- **Overflow** - when the queue is so busy that is overflowing
+ - Drop-head - older messages are removed to receive new ones
+ - Reject publish - queue rejects messages
+
+## Reliability
+
+RabbitMQ has some [resources](https://www.rabbitmq.com/reliability.html) that can be configured to ensure that messages are always delivered, even encountering failures of various kinds.
+
+- **Consumer acknowledgment** - when the consumer confirms the message receive
+- **Publish confirm** - exchange returns to the producer if it receives the message
+- **Queues and durable messages**
+
+## RabbitMQ simulator
+
+There's a great simulator to understand how it works called [Try RabbitMQ](http://tryrabbitmq.com/).
+
+## RabbitMQ via Docker
+
+You can also run RabbitMQ on your own and see how these concepts work.
+
+To run it via Docker:
+
+```bash
+docker run -d --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.11-management
+```
+
+RabbitMQ user and password is _guest_.
+
+You can also check more [downloading and installation options](https://www.rabbitmq.com/download.html).
diff --git a/public/static/images/posts/direct-exc-rabbitmq.png b/public/static/images/posts/direct-exc-rabbitmq.png
new file mode 100644
index 0000000000000000000000000000000000000000..13dfb492d755a7e701c551e3ff2faebb32ef1250
GIT binary patch
literal 17795
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
literal 0
HcmV?d00001
From 55520394591c80d692d02273c3fdf5fc5e5f0850 Mon Sep 17 00:00:00 2001
From: Lucas dos Santos Alves <30706052+lucasdsalves@users.noreply.github.com>
Date: Thu, 18 May 2023 22:16:17 -0300
Subject: [PATCH 2/3] feat: :memo: add post conventional commits
---
data/blog/an-introduction-to-rabbitmq.mdx | 5 +-
data/blog/conventional-commits.mdx | 64 +++++++++++++++++++++++
2 files changed, 68 insertions(+), 1 deletion(-)
create mode 100644 data/blog/conventional-commits.mdx
diff --git a/data/blog/an-introduction-to-rabbitmq.mdx b/data/blog/an-introduction-to-rabbitmq.mdx
index 860e619..c5cd937 100644
--- a/data/blog/an-introduction-to-rabbitmq.mdx
+++ b/data/blog/an-introduction-to-rabbitmq.mdx
@@ -50,7 +50,10 @@ The consumer can be subscribed to a queue and receive the message.
- **Header** - route messages based on header arguments
![Direct exchange](/static/images/posts/direct-exc-rabbitmq.png)
-## Queue The queue works in FIFO (*First In, First Out*) pattern.
+
+## Queue
+
+The queue works in FIFO (_First In, First Out_) pattern.
There are some important [queue properties](https://www.rabbitmq.com/queues.html#properties):
diff --git a/data/blog/conventional-commits.mdx b/data/blog/conventional-commits.mdx
new file mode 100644
index 0000000..3aa872c
--- /dev/null
+++ b/data/blog/conventional-commits.mdx
@@ -0,0 +1,64 @@
+---
+title: Conventional commits
+date: '2023-02-10'
+tags: ['#git']
+draft: false
+summary: How your commit message can make a difference
+images: []
+layout: PostLayout
+canonicalUrl:
+---
+
+## Conventional commits, have you ever heard of it?
+
+As developers, we are writers. As writers, we intend to communicate through everything we write such as code, documentation and also commits messages.
+
+[Conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) are a standardized format for writing **commit messages**.
+
+By adopting conventional commits, teams can create commit messages that follow the same structure, and format,
+making easier to review and understand changes that have been made in the codebase.
+
+It clearly helps avoiding terrible commit messages with no meaning and increases team's communication through git commits messages.
+
+Conventional Commits are related to [Semantic Versioning](https://semver.org/) assisting in controlling major, minors and patch versions.
+
+## How does it work?
+
+According to Conventional Commits, the commit message should be structured as:
+
+```
+[optional scope]:
+[optional body]
+[optional footer(s)]
+```
+
+The **scope** is optional and used to indicate which part of the project was changed.
+
+The **description** is a brief description of the change. Should be written in imperative mood.
+
+The **body** is free-form and may consist of any number of newline separated paragraphs.
+
+## Types of commits
+
+- **feat** - introduces a new feature to the codebase
+- **fix** - a bug fix
+- **docs** - changes to documentation
+- **style** - changes that are related to white-spaces, formatting, removing comments, missing semil-colons
+- **refactor** - reactoring of code
+- **test** - addition of tests or correcting existing ones
+- **build** - changes related to the build of the application or external dependencies
+- **ci** - changes made to the continuous integration configuration files and scripts
+
+_BREAKING CHANGE_
+
+## A few examples
+
+The following examples are on the Conventional Commits documentation
+
+## VS Code extension
+
+The [Conventional Commits](https://marketplace.visualstudio.com/items?itemName=vivaxy.vscode-conventional-commits) VS Code extension is very helpful to write commits the Conventional Commits way.
+
+![commit](https://github.com/vivaxy/vscode-conventional-commits/raw/HEAD/assets/docs/icon-on-the-source-control-menu.png)
+
+## Commitlint
From 0efc2f75aef09b2fcc0da9b4ae53cad41f255879 Mon Sep 17 00:00:00 2001
From: Lucas dos Santos Alves <30706052+lucasdsalves@users.noreply.github.com>
Date: Tue, 23 May 2023 22:04:50 -0300
Subject: [PATCH 3/3] feat: :memo: update post conventional commits
---
data/blog/an-introduction-to-rabbitmq.mdx | 2 +-
data/blog/conventional-commits.mdx | 62 ++++++++++++++++++-----
2 files changed, 49 insertions(+), 15 deletions(-)
diff --git a/data/blog/an-introduction-to-rabbitmq.mdx b/data/blog/an-introduction-to-rabbitmq.mdx
index c5cd937..713468f 100644
--- a/data/blog/an-introduction-to-rabbitmq.mdx
+++ b/data/blog/an-introduction-to-rabbitmq.mdx
@@ -1,7 +1,7 @@
---
title: An introduction to RabbitMQ
date: '2023-05-16'
-tags: ['#rabbitmq']
+tags: ['#rabbitmq', '#messagebroker']
draft: false
summary: A brief overview of RabbitMQ's main concepts
images: []
diff --git a/data/blog/conventional-commits.mdx b/data/blog/conventional-commits.mdx
index 3aa872c..8bca975 100644
--- a/data/blog/conventional-commits.mdx
+++ b/data/blog/conventional-commits.mdx
@@ -1,7 +1,7 @@
---
title: Conventional commits
date: '2023-02-10'
-tags: ['#git']
+tags: ['#git', '#conventionalcommits']
draft: false
summary: How your commit message can make a difference
images: []
@@ -11,16 +11,15 @@ canonicalUrl:
## Conventional commits, have you ever heard of it?
-As developers, we are writers. As writers, we intend to communicate through everything we write such as code, documentation and also commits messages.
+As developers, we are writers. As writers, we intend to communicate through everything we write such as code, documentation and also commit messages.
[Conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) are a standardized format for writing **commit messages**.
-By adopting conventional commits, teams can create commit messages that follow the same structure, and format,
-making easier to review and understand changes that have been made in the codebase.
+By adopting conventional commits, teams can create commit messages that follow the same structure, and format, making it easier to review and understand changes made in the codebase.
-It clearly helps avoiding terrible commit messages with no meaning and increases team's communication through git commits messages.
+It clearly helps avoid terrible commit messages with no meaning and increases the team's communication through git commit messages.
-Conventional Commits are related to [Semantic Versioning](https://semver.org/) assisting in controlling major, minors and patch versions.
+Conventional Commits are related to [Semantic Versioning](https://semver.org/) assisting in controlling major, minors, and patch versions.
## How does it work?
@@ -32,33 +31,68 @@ According to Conventional Commits, the commit message should be structured as:
[optional footer(s)]
```
+The **type** is an indicator of what has changed. Some of the most famous types will be listed [below](#types-of-commits) in this post.
+
The **scope** is optional and used to indicate which part of the project was changed.
-The **description** is a brief description of the change. Should be written in imperative mood.
+The **description** is a brief description of the change. Should be written in an imperative mood.
-The **body** is free-form and may consist of any number of newline separated paragraphs.
+The **body** is free-form and may consist of any number of newline-separated paragraphs.
## Types of commits
- **feat** - introduces a new feature to the codebase
- **fix** - a bug fix
- **docs** - changes to documentation
-- **style** - changes that are related to white-spaces, formatting, removing comments, missing semil-colons
-- **refactor** - reactoring of code
+- **style** - changes that are related to white spaces, formatting, removing comments, missing semi-colons
+- **refactor** - refactoring of code
- **test** - addition of tests or correcting existing ones
- **build** - changes related to the build of the application or external dependencies
- **ci** - changes made to the continuous integration configuration files and scripts
-_BREAKING CHANGE_
+A commit that has a footer **_BREAKING CHANGE:_**, or appends a **_!_** after the _type[scope]_ introduces a change that can break the app and it is usually associated with a new major version.
## A few examples
-The following examples are on the Conventional Commits documentation
+The following examples are on the Conventional Commits documentation.
+
+**Commit message with ! to draw attention to breaking change**
+
+```
+feat!: send an email to the customer when a product is shipped
+```
+
+**Commit message with scope**
+
+```
+feat(lang): add Polish language
+```
+
+**Commit message with multi-paragraph body and multiple footers**
+
+```
+fix: prevent racing of requests
+
+Introduce a request id and a reference to latest request. Dismiss
+incoming responses other than from latest request.
+
+Remove timeouts which were used to mitigate the racing issue but are
+obsolete now.
+
+Reviewed-by: Z
+Refs: #123
+```
## VS Code extension
-The [Conventional Commits](https://marketplace.visualstudio.com/items?itemName=vivaxy.vscode-conventional-commits) VS Code extension is very helpful to write commits the Conventional Commits way.
+The [Conventional Commits VS Code extension](https://marketplace.visualstudio.com/items?itemName=vivaxy.vscode-conventional-commits) is very helpful extension to write commits the Conventional Commits way.
-![commit](https://github.com/vivaxy/vscode-conventional-commits/raw/HEAD/assets/docs/icon-on-the-source-control-menu.png)
+![ccVsCodeExt](https://github.com/vivaxy/vscode-conventional-commits/raw/HEAD/assets/docs/demo.gif)
## Commitlint
+
+You can also set your project up with Conventional Commits using [Commitlint](https://commitlint.js.org/#/).
+
+Commitlint checks if your commit messages meet the Conventional Commits format.
+
+![commitlint](https://commitlint.js.org/assets/commitlint.svg)