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:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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ä.
Varmista ensin, että olet lisännyt kevään AMQP-riippuvuuden projektiisi:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
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
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");
}
}
Kuluttajat voivat vahvistaa viestit manuaalisesti viestien käsittelyn luotettavuuden varmistamiseksi.käyttää@RabbitListener
Kun kirjoitat huomautuksia, voit määrittääacknowledgeMode
vartenMANUAL
ja 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);
}
}
}
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");
}
}
}
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);
}
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);
}
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;
}
}
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.