Teknologian jakaminen

RabbitMQ:n lisäominaisuudet

2024-07-12

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

RabbitMQ on laajalti käytetty avoimen lähdekoodin viestivälittäjä, joka tukee useita viestintäprotokollia ja jota voidaan käyttää luotettavaan viestintään hajautetuissa järjestelmissä. Perusviestien jonotoimintojen lisäksi RabbitMQ tarjoaa myös edistyneitä ominaisuuksia, jotka parantavat sen ominaisuuksia korkean käytettävyyden, skaalautuvuuden ja joustavuuden suhteen. Tässä on joitain tärkeimmistä lisäominaisuuksista:

1. Korkea saatavuus

  • Peilatut jonot
    RabbitMQ tarjoaa peilijonotoiminnon jonon korkean käytettävyyden saavuttamiseksi replikoimalla jonon tilan ja viestit useisiin solmuihin. Jos pääsolmu epäonnistuu, saumaton vaihto peilijonon replikasolmuun on mahdollista.

  • Klusteritila
    RabbitMQ voi toimia klusteritilassa jakaa jonot ja vaihtimet useisiin solmuihin järjestelmän saatavuuden ja skaalautuvuuden parantamiseksi. Klusterin solmut voivat kommunikoida keskenään ja jakaa viestien ja jonojen metatietoja.

2. Viestin johdonmukaisuus

  • Viestin kuittaukset
    Kuluttajat voivat kuitata käsitellyt viestit varmistaakseen, että ne eivät katoa. Jos viestiä ei kuitata, RabbitMQ asettaa sen takaisin jonoon muiden kuluttajien käsiteltäväksi.

  • Tapahtumat
    RabbitMQ tukee AMQP-tapahtumatilaa, jonka avulla tuottajat voivat julkaista viestejä ja vahvistaa viestejä tapahtuman sisällä varmistaakseen viestien atomisuuden ja johdonmukaisuuden.

3. Viestin kesto

  • Pysyvät viestit
    RabbitMQ sallii viestien merkitsemisen pysyviksi varmistaakseen, että viestit eivät katoa välittäjän uudelleenkäynnistyksen jälkeen. Pysyvät viestit kirjoitetaan levylle sen sijaan, että ne tallennettaisiin muistiin.

  • Kestävät jonot
    Pysyvä jono jatkuu välittäjän uudelleenkäynnistyksen jälkeen, mikä varmistaa, että jonon metatiedot eivät katoa.

4. Korkea suorituskyky ja samanaikaisuus

  • Erän kuittaukset
    Anna kuluttajien vahvistaa viestejä erissä, vähentää verkon ja I/O-ylimääräisiä kustannuksia ja parantaa suorituskykyä.

  • Esihaku Count
    Asettamalla esihakumäärän kuluttaja voi hallita viestien samanaikaista käsittelyä hakemalla uusia viestejä jonosta sen jälkeen, kun tietty määrä viestejä on käsitelty.

5. Lisäosat ja laajennukset

  • Plugin System
    RabbitMQ tarjoaa joustavan laajennusjärjestelmän, ja käyttäjät voivat ladata ja purkaa laajennuksia toiminnallisuuden lisäämiseksi. Esimerkiksi Shovel-laajennusta käytetään viestien välittämiseen klustereiden välillä, ja Federation-laajennusta käytetään viestien toimittamiseen maantieteellisille alueille.

  • Hallintalaajennus
    Tarjoaa verkkopohjaisen käyttöliittymän RabbitMQ-esiintymien seurantaan ja hallintaan, mukaan lukien jonon tilan, kytkimen kokoonpanon, viestinopeuden jne.

6. Turvallisuus

  • TLS/SSL-salaus
    RabbitMQ tukee TLS/SSL:n käyttöä viestien lähetyksen salauksessa viestien turvallisuuden varmistamiseksi lähetyksen aikana.

  • Kulunvalvonta
    RabbitMQ tarjoaa käyttäjiin, rooleihin ja käyttöoikeuksiin perustuvan kulunvalvontamekanismin, jonka avulla järjestelmänvalvojat voivat määrittää tarkkoja käyttöoikeuksia.

7. Viestien reititys ja vaihto

  • Erilaiset pörssit (pörssit)
    RabbitMQ tukee useita kytkimiä, mukaan lukien Direct-, Topic-, Fanout- ja Headers-kytkimet vastaamaan erilaisiin viestien reititystarpeisiin.

  • Sidokset
    Yhdistä jonot ja vaihdot sidoksilla monimutkaisten viestireititysstrategioiden toteuttamiseksi.

8. Seuranta ja hallinto

  • Valvontaindikaattorit (mittarit)
    RabbitMQ tarjoaa yksityiskohtaisia ​​valvontaindikaattoreita, mukaan lukien viestinopeus, jonon pituus, yhteyksien määrä jne., jotka auttavat järjestelmänvalvojia ymmärtämään järjestelmän toimintatilan.

  • Hälytykset ja ilmoitukset
    RabbitMQ voi määrittää hälytyksiä laukaisemaan ilmoituksia, kun jonon pituus ylittää kynnyksen tai solmu epäonnistuu.

9. Viestien uudelleenyritys ja kuolleiden kirjainten jonot (Uudelleenyritys- ja Dead-Letter-jonot)

  • Kuolleiden kirjainten vaihdot ja jonot
    Kun viestiä ei voida käyttää tai uudelleenyritysten määrä ylittyy, se voidaan lähettää edelleen kuolleiden kirjainten jonoon jatkokäsittelyä varten.

  • Viesti Yritä uudelleen
    Tukee viestien uudelleenyritysstrategioiden määrittämistä sen varmistamiseksi, että kulutusta voidaan yrittää uudelleen, kun kulutus epäonnistuu.

10. Hybridipilvi ja ristiintietokeskus

  • Tietokeskusten välinen replikointi
    Laajennusten tai manuaalisen konfiguroinnin avulla RabbitMQ tukee viestien replikointia eri tietokeskusten välillä, mikä varmistaa korkean tiedon saatavuuden ja palautusominaisuudet.

Nämä edistyneet ominaisuudet tekevät RabbitMQ:sta tehokkaan ja joustavan viestinvälitysväliohjelmiston, joka soveltuu erilaisiin monimutkaisiin hajautettuihin järjestelmiin ja sovellusskenaarioihin. Näitä toimintoja järkevästi hyödyntämällä voidaan rakentaa tehokas, erittäin saatavilla oleva ja skaalautuva viestintäjärjestelmä.

Kuinka ottaa yleiset lisätoiminnot käyttöön keväällä:

1. Asennus ja konfigurointi

Varmista ensin, että olet lisännyt kevään AMQP-riippuvuuden projektiisi:

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

olla olemassa application.properties Määritä RabbitMQ-yhteystiedot tiedostossa:

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

2. Ilmoita jonot, vaihtimet ja sidokset

Keväällä jonot, vaihtimet ja sitovat suhteet voidaan määrittää @Beanin kautta:

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. Viestin vahvistus

Viestin manuaalinen vahvistus

Kuluttajat voivat vahvistaa viestit manuaalisesti viestien käsittelyn luotettavuuden varmistamiseksi.käyttää@RabbitListener Kun kirjoitat huomautuksia, voit määrittääacknowledgeMode vartenMANUALja vahvista viesti manuaalisesti menetelmällä:

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. Viestitapahtuma

Ota tapahtumatuki käyttöön RabbitTemplaten kautta:

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. Kuollut kirjainjono

Määritä kuollut kirjainjono ja sen sidokset:

@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. Viive jono

Käytä laajennusta viivejonon toteuttamiseen, ja voit saavuttaa viivästyneen viestien toimituksen määrittämällä viestin TTL:n (Time To Live):

@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. Samanaikaiset kuluttajat

konfiguroinnin kautta SimpleRabbitListenerContainerFactory Ota käyttöön samanaikaiset kuluttajat:

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. Laajennukset ja laajennukset

Hyödynnä RabbitMQ:n laajennustoimintoja, kuten käyttämällä Shovel-laajennusta klusterien välisten viestien välittämiseen tai Management Pluginin käyttöä valvontaan ja hallintaan.