Repository files navigation

Introduction

This project contains multiple examples using the different RabbitMQ exchanges with Spring Boot 2.

Additionally, the project contains all the configuration files that are required to run in Heroku.

Examples

Default exchange (basic)

The default exchange is a direct exchange with no name. Every queue is automatically bound to the default exchange with a routing key which is the queue name.

Fanout exchange (broadcast)

The fanout exchange sends the message to all queues that are bound to it.

Direct exchange (direct)

The direct exchange sends the message to the queues that are bind to the exchange with the same routing key that is used to send the message.

Headers exchange (headers)

The headers exchange sends the message to the queues that are bind to the exchange with any/all of the headers of the message.

Te use of this type of exchange is not recommended if you can use the topic exchange, its performance is better.

Topic exchange (topic)

The topic exchange sends the message to the queues that are bind to the exchange with a routing pattern that match the routing key.

In this exchange the routing key is a list of words delimited by periods (.).

The routing patters consists of exact words, asterisks (*) to match a word and hashtags (#) to match zero or more words.

Exception handling

The default configuration for the unhandled exceptions is requeuing the message. We can change this in the properties (spring.rabbitmq.listener.simple.default-requeue-rejected).

Running it

Running locally

With docker compose

  1. Select the example to run changing the value of the property app.rabbitmq.example in the file application-dev.properties. (Supported values are basic | broadcast | direct | headers | topic)
  2. Run docker-compose up in the root folder.
  3. Run mvnw spring-boot:run -Dspring-boot.run.profiles=producer,dev in the root folder to start a instance of the producer.
  4. Run mvnw spring-boot:run -Dspring-boot.run.profiles=consumer,dev in the root folder to start a instance of the consumer.

You can enter in the the rabbit web console going to http://localhost:15672/ with the credentials guest:guest.

Without docker compose

  1. Select the example to run changing the value of the property app.rabbitmq.example in the file application-dev.properties. (Supported values are basic | broadcast | direct | headers | topic)
  2. Configure the properties of the RabbitMQ in the file application-dev.properties.
  3. Run mvnw spring-boot:run -Dspring-boot.run.profiles=producer,dev in the root folder to start a instance of the producer.
  4. Run mvnw spring-boot:run -Dspring-boot.run.profiles=consumer,dev in the root folder to start a instance of the consumer.

Running on Heroku

To run the example in Heroku, you need the CloudAMQP add-on.

The configuration is defined in the Procfile.

The env properties are:

PropertyDefinitionDefault value
CLOUDAMQP_URLRabbitMQ connection url, added by the add-on-
EXAMPLE_TYPEThe example to runbasic
DELAY_MSThe delay between sends in milliseconds10000

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Introduction

This project contains multiple examples using the different RabbitMQ exchanges with Spring Boot 2.

Additionally, the project contains all the configuration files that are required to run in Heroku.

Examples

Default exchange (basic)

The default exchange is a direct exchange with no name. Every queue is automatically bound to the default exchange with a routing key which is the queue name.

Fanout exchange (broadcast)

The fanout exchange sends the message to all queues that are bound to it.

Direct exchange (direct)

The direct exchange sends the message to the queues that are bind to the exchange with the same routing key that is used to send the message.

Headers exchange (headers)

The headers exchange sends the message to the queues that are bind to the exchange with any/all of the headers of the message.

Te use of this type of exchange is not recommended if you can use the topic exchange, its performance is better.

Topic exchange (topic)

The topic exchange sends the message to the queues that are bind to the exchange with a routing pattern that match the routing key.

In this exchange the routing key is a list of words delimited by periods (.).

The routing patters consists of exact words, asterisks (*) to match a word and hashtags (#) to match zero or more words.

Exception handling

The default configuration for the unhandled exceptions is requeuing the message. We can change this in the properties (spring.rabbitmq.listener.simple.default-requeue-rejected).

Running it

Running locally

With docker compose

  1. Select the example to run changing the value of the property app.rabbitmq.example in the file application-dev.properties. (Supported values are basic | broadcast | direct | headers | topic)
  2. Run docker-compose up in the root folder.
  3. Run mvnw spring-boot:run -Dspring-boot.run.profiles=producer,dev in the root folder to start a instance of the producer.
  4. Run mvnw spring-boot:run -Dspring-boot.run.profiles=consumer,dev in the root folder to start a instance of the consumer.

You can enter in the the rabbit web console going to http://localhost:15672/ with the credentials guest:guest.

Without docker compose

  1. Select the example to run changing the value of the property app.rabbitmq.example in the file application-dev.properties. (Supported values are basic | broadcast | direct | headers | topic)
  2. Configure the properties of the RabbitMQ in the file application-dev.properties.
  3. Run mvnw spring-boot:run -Dspring-boot.run.profiles=producer,dev in the root folder to start a instance of the producer.
  4. Run mvnw spring-boot:run -Dspring-boot.run.profiles=consumer,dev in the root folder to start a instance of the consumer.

Running on Heroku

To run the example in Heroku, you need the CloudAMQP add-on.

The configuration is defined in the Procfile.

The env properties are:

PropertyDefinitionDefault value
CLOUDAMQP_URLRabbitMQ connection url, added by the add-on-
EXAMPLE_TYPEThe example to runbasic
DELAY_MSThe delay between sends in milliseconds10000

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Introduction

This project contains multiple examples using the different RabbitMQ exchanges with Spring Boot 2.

Additionally, the project contains all the configuration files that are required to run in Heroku.

Examples

Default exchange (basic)

The default exchange is a direct exchange with no name. Every queue is automatically bound to the default exchange with a routing key which is the queue name.

Fanout exchange (broadcast)

The fanout exchange sends the message to all queues that are bound to it.

Direct exchange (direct)

The direct exchange sends the message to the queues that are bind to the exchange with the same routing key that is used to send the message.

Headers exchange (headers)

The headers exchange sends the message to the queues that are bind to the exchange with any/all of the headers of the message.

Te use of this type of exchange is not recommended if you can use the topic exchange, its performance is better.

Topic exchange (topic)

The topic exchange sends the message to the queues that are bind to the exchange with a routing pattern that match the routing key.

In this exchange the routing key is a list of words delimited by periods (.).

The routing patters consists of exact words, asterisks (*) to match a word and hashtags (#) to match zero or more words.

Exception handling

The default configuration for the unhandled exceptions is requeuing the message. We can change this in the properties (spring.rabbitmq.listener.simple.default-requeue-rejected).

Running it

Running locally

With docker compose

  1. Select the example to run changing the value of the property app.rabbitmq.example in the file application-dev.properties. (Supported values are basic | broadcast | direct | headers | topic)
  2. Run docker-compose up in the root folder.
  3. Run mvnw spring-boot:run -Dspring-boot.run.profiles=producer,dev in the root folder to start a instance of the producer.
  4. Run mvnw spring-boot:run -Dspring-boot.run.profiles=consumer,dev in the root folder to start a instance of the consumer.

You can enter in the the rabbit web console going to http://localhost:15672/ with the credentials guest:guest.

Without docker compose

  1. Select the example to run changing the value of the property app.rabbitmq.example in the file application-dev.properties. (Supported values are basic | broadcast | direct | headers | topic)
  2. Configure the properties of the RabbitMQ in the file application-dev.properties.
  3. Run mvnw spring-boot:run -Dspring-boot.run.profiles=producer,dev in the root folder to start a instance of the producer.
  4. Run mvnw spring-boot:run -Dspring-boot.run.profiles=consumer,dev in the root folder to start a instance of the consumer.

Running on Heroku

To run the example in Heroku, you need the CloudAMQP add-on.

The configuration is defined in the Procfile.

The env properties are:

PropertyDefinitionDefault value
CLOUDAMQP_URLRabbitMQ connection url, added by the add-on-
EXAMPLE_TYPEThe example to runbasic
DELAY_MSThe delay between sends in milliseconds10000

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Introduction

This project contains multiple examples using the different RabbitMQ exchanges with Spring Boot 2.

Additionally, the project contains all the configuration files that are required to run in Heroku.

Examples

Default exchange (basic)

The default exchange is a direct exchange with no name. Every queue is automatically bound to the default exchange with a routing key which is the queue name.

Fanout exchange (broadcast)

The fanout exchange sends the message to all queues that are bound to it.

Direct exchange (direct)

The direct exchange sends the message to the queues that are bind to the exchange with the same routing key that is used to send the message.

Headers exchange (headers)

The headers exchange sends the message to the queues that are bind to the exchange with any/all of the headers of the message.

Te use of this type of exchange is not recommended if you can use the topic exchange, its performance is better.

Topic exchange (topic)

The topic exchange sends the message to the queues that are bind to the exchange with a routing pattern that match the routing key.

In this exchange the routing key is a list of words delimited by periods (.).

The routing patters consists of exact words, asterisks (*) to match a word and hashtags (#) to match zero or more words.

Exception handling

The default configuration for the unhandled exceptions is requeuing the message. We can change this in the properties (spring.rabbitmq.listener.simple.default-requeue-rejected).

Running it

Running locally

With docker compose

  1. Select the example to run changing the value of the property app.rabbitmq.example in the file application-dev.properties. (Supported values are basic | broadcast | direct | headers | topic)
  2. Run docker-compose up in the root folder.
  3. Run mvnw spring-boot:run -Dspring-boot.run.profiles=producer,dev in the root folder to start a instance of the producer.
  4. Run mvnw spring-boot:run -Dspring-boot.run.profiles=consumer,dev in the root folder to start a instance of the consumer.

You can enter in the the rabbit web console going to http://localhost:15672/ with the credentials guest:guest.

Without docker compose

  1. Select the example to run changing the value of the property app.rabbitmq.example in the file application-dev.properties. (Supported values are basic | broadcast | direct | headers | topic)
  2. Configure the properties of the RabbitMQ in the file application-dev.properties.
  3. Run mvnw spring-boot:run -Dspring-boot.run.profiles=producer,dev in the root folder to start a instance of the producer.
  4. Run mvnw spring-boot:run -Dspring-boot.run.profiles=consumer,dev in the root folder to start a instance of the consumer.

Running on Heroku

To run the example in Heroku, you need the CloudAMQP add-on.

The configuration is defined in the Procfile.

The env properties are:

PropertyDefinitionDefault value
CLOUDAMQP_URLRabbitMQ connection url, added by the add-on-
EXAMPLE_TYPEThe example to runbasic
DELAY_MSThe delay between sends in milliseconds10000

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Introduction

This project contains multiple examples using the different RabbitMQ exchanges with Spring Boot 2.

Additionally, the project contains all the configuration files that are required to run in Heroku.

Examples

Default exchange (basic)

The default exchange is a direct exchange with no name. Every queue is automatically bound to the default exchange with a routing key which is the queue name.

Fanout exchange (broadcast)

The fanout exchange sends the message to all queues that are bound to it.

Direct exchange (direct)

The direct exchange sends the message to the queues that are bind to the exchange with the same routing key that is used to send the message.

Headers exchange (headers)

The headers exchange sends the message to the queues that are bind to the exchange with any/all of the headers of the message.

Te use of this type of exchange is not recommended if you can use the topic exchange, its performance is better.

Topic exchange (topic)

The topic exchange sends the message to the queues that are bind to the exchange with a routing pattern that match the routing key.

In this exchange the routing key is a list of words delimited by periods (.).

The routing patters consists of exact words, asterisks (*) to match a word and hashtags (#) to match zero or more words.

Exception handling

The default configuration for the unhandled exceptions is requeuing the message. We can change this in the properties (spring.rabbitmq.listener.simple.default-requeue-rejected).

Running it

Running locally

With docker compose

  1. Select the example to run changing the value of the property app.rabbitmq.example in the file application-dev.properties. (Supported values are basic | broadcast | direct | headers | topic)
  2. Run docker-compose up in the root folder.
  3. Run mvnw spring-boot:run -Dspring-boot.run.profiles=producer,dev in the root folder to start a instance of the producer.
  4. Run mvnw spring-boot:run -Dspring-boot.run.profiles=consumer,dev in the root folder to start a instance of the consumer.

You can enter in the the rabbit web console going to http://localhost:15672/ with the credentials guest:guest.

Without docker compose

  1. Select the example to run changing the value of the property app.rabbitmq.example in the file application-dev.properties. (Supported values are basic | broadcast | direct | headers | topic)
  2. Configure the properties of the RabbitMQ in the file application-dev.properties.
  3. Run mvnw spring-boot:run -Dspring-boot.run.profiles=producer,dev in the root folder to start a instance of the producer.
  4. Run mvnw spring-boot:run -Dspring-boot.run.profiles=consumer,dev in the root folder to start a instance of the consumer.

Running on Heroku

To run the example in Heroku, you need the CloudAMQP add-on.

The configuration is defined in the Procfile.

The env properties are:

PropertyDefinitionDefault value
CLOUDAMQP_URLRabbitMQ connection url, added by the add-on-
EXAMPLE_TYPEThe example to runbasic
DELAY_MSThe delay between sends in milliseconds10000

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Introduction

This project contains multiple examples using the different RabbitMQ exchanges with Spring Boot 2.

Additionally, the project contains all the configuration files that are required to run in Heroku.

Examples

Default exchange (basic)

The default exchange is a direct exchange with no name. Every queue is automatically bound to the default exchange with a routing key which is the queue name.

Fanout exchange (broadcast)

The fanout exchange sends the message to all queues that are bound to it.

Direct exchange (direct)

The direct exchange sends the message to the queues that are bind to the exchange with the same routing key that is used to send the message.

Headers exchange (headers)

The headers exchange sends the message to the queues that are bind to the exchange with any/all of the headers of the message.

Te use of this type of exchange is not recommended if you can use the topic exchange, its performance is better.

Topic exchange (topic)

The topic exchange sends the message to the queues that are bind to the exchange with a routing pattern that match the routing key.

In this exchange the routing key is a list of words delimited by periods (.).

The routing patters consists of exact words, asterisks (*) to match a word and hashtags (#) to match zero or more words.

Exception handling

The default configuration for the unhandled exceptions is requeuing the message. We can change this in the properties (spring.rabbitmq.listener.simple.default-requeue-rejected).

Running it

Running locally

With docker compose

  1. Select the example to run changing the value of the property app.rabbitmq.example in the file application-dev.properties. (Supported values are basic | broadcast | direct | headers | topic)
  2. Run docker-compose up in the root folder.
  3. Run mvnw spring-boot:run -Dspring-boot.run.profiles=producer,dev in the root folder to start a instance of the producer.
  4. Run mvnw spring-boot:run -Dspring-boot.run.profiles=consumer,dev in the root folder to start a instance of the consumer.

You can enter in the the rabbit web console going to http://localhost:15672/ with the credentials guest:guest.

Without docker compose

  1. Select the example to run changing the value of the property app.rabbitmq.example in the file application-dev.properties. (Supported values are basic | broadcast | direct | headers | topic)
  2. Configure the properties of the RabbitMQ in the file application-dev.properties.
  3. Run mvnw spring-boot:run -Dspring-boot.run.profiles=producer,dev in the root folder to start a instance of the producer.
  4. Run mvnw spring-boot:run -Dspring-boot.run.profiles=consumer,dev in the root folder to start a instance of the consumer.

Running on Heroku

To run the example in Heroku, you need the CloudAMQP add-on.

The configuration is defined in the Procfile.

The env properties are:

PropertyDefinitionDefault value
CLOUDAMQP_URLRabbitMQ connection url, added by the add-on-
EXAMPLE_TYPEThe example to runbasic
DELAY_MSThe delay between sends in milliseconds10000

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Introduction

This project contains multiple examples using the different RabbitMQ exchanges with Spring Boot 2.

Additionally, the project contains all the configuration files that are required to run in Heroku.

Examples

Default exchange (basic)

The default exchange is a direct exchange with no name. Every queue is automatically bound to the default exchange with a routing key which is the queue name.

Fanout exchange (broadcast)

The fanout exchange sends the message to all queues that are bound to it.

Direct exchange (direct)

The direct exchange sends the message to the queues that are bind to the exchange with the same routing key that is used to send the message.

Headers exchange (headers)

The headers exchange sends the message to the queues that are bind to the exchange with any/all of the headers of the message.

Te use of this type of exchange is not recommended if you can use the topic exchange, its performance is better.

Topic exchange (topic)

The topic exchange sends the message to the queues that are bind to the exchange with a routing pattern that match the routing key.

In this exchange the routing key is a list of words delimited by periods (.).

The routing patters consists of exact words, asterisks (*) to match a word and hashtags (#) to match zero or more words.

Exception handling

The default configuration for the unhandled exceptions is requeuing the message. We can change this in the properties (spring.rabbitmq.listener.simple.default-requeue-rejected).

Running it

Running locally

With docker compose

  1. Select the example to run changing the value of the property app.rabbitmq.example in the file application-dev.properties. (Supported values are basic | broadcast | direct | headers | topic)
  2. Run docker-compose up in the root folder.
  3. Run mvnw spring-boot:run -Dspring-boot.run.profiles=producer,dev in the root folder to start a instance of the producer.
  4. Run mvnw spring-boot:run -Dspring-boot.run.profiles=consumer,dev in the root folder to start a instance of the consumer.

You can enter in the the rabbit web console going to http://localhost:15672/ with the credentials guest:guest.

Without docker compose

  1. Select the example to run changing the value of the property app.rabbitmq.example in the file application-dev.properties. (Supported values are basic | broadcast | direct | headers | topic)
  2. Configure the properties of the RabbitMQ in the file application-dev.properties.
  3. Run mvnw spring-boot:run -Dspring-boot.run.profiles=producer,dev in the root folder to start a instance of the producer.
  4. Run mvnw spring-boot:run -Dspring-boot.run.profiles=consumer,dev in the root folder to start a instance of the consumer.

Running on Heroku

To run the example in Heroku, you need the CloudAMQP add-on.

The configuration is defined in the Procfile.

The env properties are:

PropertyDefinitionDefault value
CLOUDAMQP_URLRabbitMQ connection url, added by the add-on-
EXAMPLE_TYPEThe example to runbasic
DELAY_MSThe delay between sends in milliseconds10000

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Introduction

This project contains multiple examples using the different RabbitMQ exchanges with Spring Boot 2.

Additionally, the project contains all the configuration files that are required to run in Heroku.

Examples

Default exchange (basic)

The default exchange is a direct exchange with no name. Every queue is automatically bound to the default exchange with a routing key which is the queue name.

Fanout exchange (broadcast)

The fanout exchange sends the message to all queues that are bound to it.

Direct exchange (direct)

The direct exchange sends the message to the queues that are bind to the exchange with the same routing key that is used to send the message.

Headers exchange (headers)

The headers exchange sends the message to the queues that are bind to the exchange with any/all of the headers of the message.

Te use of this type of exchange is not recommended if you can use the topic exchange, its performance is better.

Topic exchange (topic)

The topic exchange sends the message to the queues that are bind to the exchange with a routing pattern that match the routing key.

In this exchange the routing key is a list of words delimited by periods (.).

The routing patters consists of exact words, asterisks (*) to match a word and hashtags (#) to match zero or more words.

Exception handling

The default configuration for the unhandled exceptions is requeuing the message. We can change this in the properties (spring.rabbitmq.listener.simple.default-requeue-rejected).

Running it

Running locally

With docker compose

  1. Select the example to run changing the value of the property app.rabbitmq.example in the file application-dev.properties. (Supported values are basic | broadcast | direct | headers | topic)
  2. Run docker-compose up in the root folder.
  3. Run mvnw spring-boot:run -Dspring-boot.run.profiles=producer,dev in the root folder to start a instance of the producer.
  4. Run mvnw spring-boot:run -Dspring-boot.run.profiles=consumer,dev in the root folder to start a instance of the consumer.

You can enter in the the rabbit web console going to http://localhost:15672/ with the credentials guest:guest.

Without docker compose

  1. Select the example to run changing the value of the property app.rabbitmq.example in the file application-dev.properties. (Supported values are basic | broadcast | direct | headers | topic)
  2. Configure the properties of the RabbitMQ in the file application-dev.properties.
  3. Run mvnw spring-boot:run -Dspring-boot.run.profiles=producer,dev in the root folder to start a instance of the producer.
  4. Run mvnw spring-boot:run -Dspring-boot.run.profiles=consumer,dev in the root folder to start a instance of the consumer.

Running on Heroku

To run the example in Heroku, you need the CloudAMQP add-on.

The configuration is defined in the Procfile.

The env properties are:

PropertyDefinitionDefault value
CLOUDAMQP_URLRabbitMQ connection url, added by the add-on-
EXAMPLE_TYPEThe example to runbasic
DELAY_MSThe delay between sends in milliseconds10000

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages