Technology sharing

RabbitMQ provectis

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

RabbitMQ nuntius sector apertus late usus est qui plures nuntios protocolla sustinet et ad certos nuntios in systematis distributis adhiberi potest. Praeter nuntium fundamentalem functionis queueing, RabbitMQ etiam notas provectas praebet quae suas facultates augeant secundum altam promptitudinem, scalam, et flexibilitatem. Hic sunt notae quaedam praecipuorum provectorum:

1. High Availability

  • Speculum Queues
    RabbitMQ speculum queue munus praebet ad consequendam summam queue disponibilitatem replicando statum et nuntios queue multis nodis. Si dominus nodi deficit, inconsutilem mutatorium ad imaginem nodi in speculi queue fieri potest.

  • Botrus Modus
    RabbitMQ in racemum modum currere potest, queues et commutatores in multiplicibus nodis distribuendi ratio promptitudinis et scalabilitatis emendandi. Nodi in botro communicare possunt inter se et nuntium communicare et metadata queue.

2. Nuntius Constantia

  • Nuntius agnitiones
    Consumtores agnoscere possunt nuntios processionaliter curare ut non pereant. Si nuntius non agnoscitur, RabbitMQ eam in queue remittit ad dispensandum ab aliis sumptis.

  • Transactions
    RabbitMQ modum transactionis AMQP sustinet, qui effectores permittit nuntios evulgare et nuntios confirmare intra transactionem ut atomicity et constantiae epistularum curet.

3. Nuntius Durability

  • Pertinax Messages
    RabbitMQ nuntiis permittit notari tam constans ut nuntia ne post sileo sectorem amittatur. Epistulae constantes scriptae sunt in orbe potius quam in memoria repositae.

  • Dura Queues
    Constans queue persistit postquam sectorem restarted, ut queue metadata non amittatur.

4. High Throughput et Concurrency

  • Batch agnitiones
    Liceat consumers ad confirmandas nuntios in batches, retiaculum et caput I/O minuere, et throughput emendare.

  • Prefetch Comes
    Ponendo comitem prefetchum, consumptor potest moderari processum concurrentem nuntiorum, novos nuntios e queue arcessens, cum certum numerum epistularum expedias.

5. Plugins et Tractus

  • Plugin System
    RabbitMQ praebet obturaculum flexibile in systemate, et usores obturaculum-ins onerare et exonerare possunt ad functionem augendam. Exempli causa, plugin trulla ad epistulas trans ligaturas transmittere adhibetur, et Foederatio plugin ad mandata tradenda per locorum locorum locorum distributa adhibetur.

  • Management Plugin
    Usorem interfacetum substructum praebet ad instantias vigilantias et administrandas RabbitMQ, incluso inspiciendo quenam statum, switch configurationem, rate nuntium, etc.

6. Securitatis

  • TLS/SSL encryption
    RabbitMQ usum TLS/SSL sustinet ad nuntium transmissionis encryption ad securitatem nuntii in transmissione tuenda.

  • Accessum imperium
    RabbitMQ accessum praebet mechanismum moderandi in usoribus, muneribus ac permissionibus, administratoribus permittens accessum permissionum subtiliter configurare.

7. Nuntius Routing et Exchange

  • Genera commutationum (Exchanges)
    RabbitMQ multas rationes virgarum sustinet, incluso Direct, Topic, Fanout et Capituli virgas ad diversas nuntios excitandas necessitates occurrentes.

  • Vincula
    Coniungere queues et permutationes per ligaturas ad effectum deducendi nuntios insidijs excitandis.

8. Cras et Management

  • Magna Indicatores (Metrics)
    RabbitMQ magna indicia accurata praebet, in iis nuntius rate, longitudo, numerus coniunctionum, etc., ut administratores adiuvent statum systematis operantem intelligant.

  • Terret ac Suspendisse
    RabbitMQ terrores felis notificationes configurare potest cum longitudo queue limen vel nodi deficit.

9. Nuntius Retry et mortuus-littera queues (Retry et Mortuus Epistula Queues)

  • Mortuus Epistulae permutationes et Queues
    Cum nuntius consumi non potest vel numerus retrium exceditur, transmitti potest ad litteras mortuas queue ad ulteriores processus.

  • Nuntius Retry
    Nuntium retry consilia configurans adiuvat ut consummatio retractari possit cum deficit consummatio.

10. Hybrid Cloud and Cross-Datacenter

  • Crucis-Datacenter Replicatio
    Per obturaculum-ins vel manualem configurationem, RabbitMQ nuntius replicationem inter diversa centra data sustinet, ut altae notitiae promptitudinis et calamitatis facultates recipiant.

Hae notae provectae efficiunt RabbitMQ potentem ac flexibilem nuntius mediae artis, variis incomplexis systematibus et applicationibus missionibus distributis aptam. Per has functiones rationaliter utendo, summus effectus, altus promptus, et ratio quantitatis scalabilis aedificari potest.

Quomodo ad efficiendum munera communia provecta in Spring;

Installation et configuratione 1.

Primum, fac ut fontem AMQP dependentiam in consilium tuum introduxeris;

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4

exist application.properties Configurare RabbitMQ connexionis informationes in tabella:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
  • 1
  • 2
  • 3
  • 4

2. Annuntiate queues, nummularios et ligaturas

Vere, queues, commutatores et ligaturae relationes definiri possunt per @Bean:

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableRabbit
public class RabbitConfig {

    static final String queueName = "testQueue";
    static final String exchangeName = "testExchange";

    @Bean
    Queue queue() {
        return new Queue(queueName, true);
    }

    @Bean
    DirectExchange exchange() {
        return new DirectExchange(exchangeName);
    }

    @Bean
    Binding binding(Queue queue, DirectExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("testRoutingKey");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

3. Nuntius confirmationis

Epistula manualis confirmatio

Consumentes manually nuntiis confirmare possunt ut firmitas nuntii processus.usus@RabbitListener Cum annotat, configurare potesacknowledgeMode for*MANUALac nuntium manualem in methodo confirmandum;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.support.Acknowledgment;

public class RabbitMQReceiver {

    @RabbitListener(queues = "testQueue", ackMode = "MANUAL")
    public void receiveMessage(Message message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) {
        try {
            // 处理消息
            System.out.println("Received message: " + new String(message.getBody()));
            
            // 手动确认消息
            channel.basicAck(tag, false);
        } catch (Exception e) {
            // 拒绝消息
            channel.basicNack(tag, false, true);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

4. Nuntius transaction

Re effectum deducendi per RabbitTemplate firmamentum:

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class RabbitMQService {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Transactional
    public void sendMessage(String message) {
        // 发送消息
        rabbitTemplate.convertAndSend("testExchange", "testRoutingKey", message);

        // 模拟事务回滚
        if (message.contains("error")) {
            throw new RuntimeException("Error occurred");
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

5. Mortuus litteras queue

Configurare litteras mortuas queue et eius ligamenta;

@Bean
Queue dlq() {
    return new Queue("dlq", true);
}

@Bean
Binding dlqBinding() {
    return BindingBuilder.bind(dlq()).to(exchange()).with("dlqRoutingKey");
}

@Bean
Queue mainQueue() {
    Map<String, Object> args = new HashMap<>();
    args.put("x-dead-letter-exchange", exchangeName);
    args.put("x-dead-letter-routing-key", "dlqRoutingKey");
    return new Queue("mainQueue", true, false, false, args);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

6. mora queue

Obturaculum in utere ad queue moram trahendi, et nuntium morantem consequi potes per nuntium nuntiationis figurans TTL (Tempus Vivendi)

@Bean
Queue delayedQueue() {
    Map<String, Object> args = new HashMap<>();
    args.put("x-message-ttl", 60000); // 消息的 TTL 为 60 秒
    args.put("x-dead-letter-exchange", exchangeName);
    args.put("x-dead-letter-routing-key", "dlqRoutingKey");
    return new Queue("delayedQueue", true, false, false, args);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

7. Concurrent consumers

per configuratione SimpleRabbitListenerContainerFactory Concurrentes perussi deducendi:

import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.listener.SimpleRabbitListenerContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitConfig {

    @Bean
    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setConcurrentConsumers(3); // 并发消费者数量
        factory.setMaxConcurrentConsumers(10);
        return factory;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

8. Plug-ins and Tractus

Abutendumque est obturaculum RabbitMQ in functionibus, ut trulla obturaculum-in utendo ad transversas botri nuntios, vel utendo Plugin procuratio ad vigilantiam et administrationem.