Cloud computing

Introduction

Architecture de Spring Cloud

Eureka Config Serve Zuul Consul Hystrix Resilience4J

Spring Boot (BackEnd) TPs

Creation,Dépendance,Configuration Exemple Video RestController

Produit Rest API

Entity et repository Ajouter Afficher Liste Produit Détails,Supprimer,Vider Modifier

Angular (FrontEnd)

Angular Rappel CLient CRUD

Spring Security

User Auth

CRUD

Vente CRUD

To be Continued...

Middlewares Orientés Messages

Communication Synchrone vs. Asynchrone API JMS : Java Message Service JMS avec ActiveMQ et HornetQ KAFKA

Spring Batch

Spring Batch

Stream Processing

Kafka Streams

Architectures Serverless

Architectures Serverless Résumé



API JMS : Java Message Service

Java Message Service (JMS) is an API provided by Java for sending, receiving, and processing messages in a loosely coupled, asynchronous way. It is widely used for integrating distributed applications using message-oriented middleware (MOM). JMS is often used in applications requiring reliable communication and decoupled architectures.

Core Concepts in JMS

  • Message Broker: Middleware (e.g., ActiveMQ, RabbitMQ) that facilitates message communication between producers and consumers.
  • Destination: Represents the endpoint (queue or topic) where messages are sent.
  • Queue: Point-to-Point communication (one producer, one consumer).
  • Topic: Publish/Subscribe communication (one producer, multiple subscribers).
  • Producer: Sends messages to a destination.
  • Consumer: Receives messages from a destination.
  • Message: The actual data being transmitted (e.g., text, object, XML).
graph TD P1[Producer 1] -->|Sends Message| Broker[Message Broker] P2[Producer 2] -->|Sends Message| Broker Broker -->|Routes to Queue| Queue1[Queue] Broker -->|Routes to Topic| Topic1[Topic] Queue1 -->|Delivers Message| C1[Consumer 1] Queue1 -->|Delivers Message| C2[Consumer 2] Topic1 -->|Broadcast Message| C3[Consumer 3] Topic1 -->|Broadcast Message| C4[Consumer 4]
ProtocolUse CaseDescription
AMQPFinancial Services. Advanced Message Queuing Protocol (AMQP)
AMQP is a robust messaging protocol designed for message-oriented middleware, providing features like message queuing, routing, and reliable delivery., Transaction processing with reliable delivery through a broker.
MQTTSmart Home Automation Message Queuing Telemetry Transport (MQTT)
MQTT is a lightweight messaging protocol optimized for low-bandwidth and high-latency networks, commonly used in IoT applications.
Lightweight communication between IoT devices using publish/subscribe model.
STOMPWeb Application Chat Streaming Text Oriented Messaging Protocol (STOMP)
STOMP is a simple text-based protocol designed for interoperability between messaging clients and brokers.
Real-time messaging in a chat application using simple text frames.

ActiveMQ vs RabbitMQ

  1. Protocol Support
    • ActiveMQ: Offers extensive protocol support including JMS and various other protocols.
    • RabbitMQ: Primarily supports AMQP but also includes MQTT and STOMP.
  2. Language Focus
    • ActiveMQ: Focused on Java with strong JMS integration.
    • RabbitMQ: Designed to be language-agnostic, supporting multiple programming languages.
  3. Performance
    • ActiveMQ: Provides moderate throughput suitable for many applications.
    • RabbitMQ: Known for high throughput and low latency, making it ideal for performance-sensitive applications.
  4. Scaling
    • ActiveMQ: Supports vertical scaling through a master-slave configuration.
    • RabbitMQ: Facilitates horizontal scaling via clustering, allowing for better distribution of load.
  5. Persistence
    • ActiveMQ: Utilizes KahaDB and JDBC for message persistence.
    • RabbitMQ: Offers efficient disk storage optimized for AMQP.
  6. Delivery Guarantees
    • ActiveMQ: Provides a range of delivery guarantees including exactly-once semantics.
    • RabbitMQ: Supports at-least-once and at-most-once delivery guarantees.
  7. Ease of Use
    • ActiveMQ: Configuration can be complex due to its extensive features.
    • RabbitMQ: Generally easier to configure and manage, appealing to developers looking for quick setup.

Spring Boot Example Using JMS (with ActiveMQ)

This example demonstrates a simple JMS application with ActiveMQ.

Dependencies

Add the required dependencies in pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

ActiveMQ in application.properties:


spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.jms.pub-sub-domain=false # Set to true for Topic

JMS Producer

Create a producer to send messages to a queue:

import org.springframework.jms.core.JmsTemplate;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/messages")
public class MessageProducer {
    private final JmsTemplate jmsTemplate;

    public MessageProducer(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }

    @PostMapping("/send")
    public String sendMessage(@RequestParam String message) {
        jmsTemplate.convertAndSend("myQueue", message);
        return "Message sent: " + message;
    }
}

JMS Consumer

Create a consumer to receive messages:

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

@Component
public class MessageConsumer {
    @JmsListener(destination = "myQueue")
    public void receiveMessage(String message) {
        System.out.println("Received message: " + message);
    }
}

Run ActiveMQ

Download and install ActiveMQ (ActiveMQ Download).
Start the broker by running:
activemq start

Test the Application

 POST "http://localhost:8080/messages/send?message=HelloJMS"
Check the Console: The consumer will log the received message:
Received message: HelloJMS
Advantages of Using JMS with Spring Boot
Simplifies JMS Configuration: Spring Boot auto-configures the necessary components.
Loose Coupling: Decouples producers and consumers.
Reliability: Ensures message delivery with acknowledgment mechanisms.
Scalability: Easy to scale by adding more producers or consumers