प्रौद्योगिकी साझेदारी

RabbitMQ उन्नत विशेषताएँ

2024-07-12

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

RabbitMQ एकः व्यापकरूपेण प्रयुक्तः मुक्तस्रोतसन्देशदलालः अस्ति यः बहुविधसन्देशप्रोटोकॉलसमर्थयति तथा च वितरितप्रणालीषु विश्वसनीयसन्देशप्रसारणस्य कृते उपयोक्तुं शक्यते । मूलभूतसन्देशपङ्क्तिकार्यक्षमतायाः अतिरिक्तं, RabbitMQ उन्नतविशेषताः अपि प्रदाति ये उच्चउपलब्धतायाः, मापनीयतायाः, लचीलतायाः च दृष्ट्या तस्य क्षमतां वर्धयन्ति अत्र केचन मुख्याः उन्नतविशेषताः सन्ति ।

1. उच्चा उपलब्धता

  • दर्पणयुक्ताः पङ्क्तयः
    RabbitMQ कतारस्य स्थितिं सन्देशान् च बहुनोड्-मध्ये प्रतिकृत्य कतारस्य उच्च-उपलब्धतां प्राप्तुं दर्पण-कतार-कार्यं प्रदाति । यदि मुख्यनोड् विफलः भवति तर्हि दर्पणपङ्क्तौ प्रतिकृतिनोड् प्रति निर्विघ्नस्विचओवरः सम्भवति ।

  • क्लस्टर मोड
    RabbitMQ क्लस्टर मोड् मध्ये चालयितुं शक्नोति, प्रणाली उपलब्धतां मापनीयतां च सुधारयितुम् अनेकनोड् मध्ये कतारं एक्सचेंजरं च वितरितुं शक्नोति । क्लस्टर् मध्ये नोड्स् परस्परं संवादं कर्तुं शक्नुवन्ति तथा च सन्देशस्य कतारस्य मेटाडाटा च साझां कर्तुं शक्नुवन्ति ।

2. सन्देशस्य स्थिरता

  • सन्देश आभार
    उपभोक्तारः संसाधितसन्देशान् स्वीकुर्वितुं शक्नुवन्ति येन ते नष्टाः न भवन्ति इति सुनिश्चितं भवति । यदि सन्देशः न स्वीकृतः तर्हि RabbitMQ अन्यैः उपभोक्तृभिः संसाधनार्थं पुनः पङ्क्तौ स्थापयति ।

  • व्यवहारः
    RabbitMQ AMQP लेनदेनविधिं समर्थयति, यत् उत्पादकान् सन्देशान् प्रकाशयितुं लेनदेनस्य अन्तः सन्देशान् पुष्टयितुं च अनुमतिं ददाति यत् सन्देशानां परमाणुत्वं स्थिरतां च सुनिश्चितं करोति

3. सन्देशस्य स्थायित्वम्

  • निरन्तर सन्देश
    RabbitMQ दलालस्य पुनः आरम्भस्य अनन्तरं सन्देशाः नष्टाः न भवन्ति इति सुनिश्चित्य सन्देशान् स्थायित्वेन चिह्नितुं शक्नोति । निरन्तरं सन्देशाः केवलं स्मृतौ न संगृहीताः न अपितु डिस्कमध्ये लिख्यन्ते ।

  • टिकाऊ पङ्क्तयः
    दलालस्य पुनः आरम्भस्य अनन्तरं निरन्तरं पङ्क्तिः स्थास्यति, यत् पङ्क्तिमेटाडाटा न नष्टः इति सुनिश्चितं करोति ।

4. उच्च थ्रूपुट तथा समवर्ती

  • बैच आभार
    उपभोक्तृभ्यः बैच-रूपेण सन्देशान् पुष्टयितुं, संजालस्य तथा I/O-उपरिभारस्य न्यूनीकरणाय, तथा च थ्रूपुट्-सुधारस्य अनुमतिं ददातु ।

  • पूर्वागमन गणना
    प्रीफेच् गणनां सेट् कृत्वा उपभोक्ता निर्दिष्टसङ्ख्यायाः सन्देशानां संसाधनानन्तरं पङ्क्तितः नूतनान् सन्देशान् आनयन् सन्देशानां समवर्तीप्रक्रियाकरणं नियन्त्रयितुं शक्नोति

5. प्लगिन्स् तथा एक्सटेंशन्स्

  • प्लगइन प्रणाली
    RabbitMQ एकं लचीलं प्लग-इन्-प्रणालीं प्रदाति, तथा च उपयोक्तारः कार्यक्षमतां वर्धयितुं प्लग-इन् लोड्-अनलोड् कर्तुं शक्नुवन्ति । यथा, Shovel प्लगिन् इत्यस्य उपयोगः समूहेषु सन्देशान् अग्रे प्रेषयितुं भवति, तथा च Federation प्लगिन् इत्यस्य उपयोगः भौगोलिकस्थानेषु वितरितसन्देशान् वितरितुं भवति ।

  • प्रबन्धन प्लगइन
    RabbitMQ उदाहरणानां निरीक्षणाय प्रबन्धनाय च जाल-आधारितं उपयोक्तृ-अन्तरफलकं प्रदाति, यत्र कतार-स्थितिः, स्विच-विन्यासः, सन्देश-दरः इत्यादयः द्रष्टुं शक्यन्ते ।

6. सुरक्षा

  • TLS/SSL एन्क्रिप्शन
    RabbitMQ संचरणकाले सन्देशानां सुरक्षां सुनिश्चित्य सन्देशसञ्चारगोपनार्थं TLS/SSL इत्यस्य उपयोगं समर्थयति ।

  • अभिगमननियन्त्रणम्
    RabbitMQ उपयोक्तृषु, भूमिकासु, अनुमतिषु च आधारितं अभिगमनियन्त्रणतन्त्रं प्रदाति, यत् प्रशासकाः सूक्ष्म-कणिका-प्रवेश-अनुमतिः विन्यस्तुं शक्नुवन्ति ।

7. सन्देशमार्गनिर्धारणं आदानप्रदानं च

  • विभिन्न प्रकाराः आदानप्रदानाः (Exchanges) २.
    RabbitMQ अनेकप्रकारस्य स्विचस्य समर्थनं करोति, यत्र विभिन्नसन्देशमार्गनिर्देशनआवश्यकतानां पूर्तये Direct, Topic, Fanout तथा ​​Headers स्विचः सन्ति ।

  • बन्धनानि
    जटिलसन्देशमार्गनिर्देशनरणनीतयः कार्यान्वितुं बाइण्डिंग्द्वारा कतारं आदानप्रदानं च संयोजयन्तु ।

8. निगरानी एवं प्रबन्धन

  • निगरानीयसूचकाः (Metrics) 1.1.
    RabbitMQ विस्तृतनिरीक्षणसूचकाः प्रदाति, यत्र सन्देशदरः, कतारदीर्घता, संयोजनानां संख्या इत्यादयः सन्ति, येन प्रशासकाः प्रणाल्याः संचालनस्थितिं अवगन्तुं शक्नुवन्ति

  • अलार्म एवं सूचनाएँ
    RabbitMQ सूचनां प्रेरयितुं अलार्मं विन्यस्तुं शक्नोति यदा कतारदीर्घता सीमां अतिक्रमति अथवा नोड् विफलं भवति ।

9. सन्देशस्य पुनः प्रयासः तथा मृत-अक्षर-पङ्क्तयः (पुनः प्रयासः तथा मृत-अक्षर-पङ्क्तयः)

  • मृत-पत्र-आदान-प्रदानं पङ्क्तयः च
    यदा सन्देशः उपभोक्तुं न शक्यते अथवा पुनः प्रयासानां संख्या अतिक्रान्तं भवति तदा अग्रे संसाधनार्थं मृतपत्रपङ्क्तौ अग्रे प्रेषयितुं शक्यते ।

  • सन्देश पुनः प्रयासं कुर्वन्तु
    उपभोगस्य विफलतायां उपभोगस्य पुनः प्रयासः कर्तुं शक्यते इति सुनिश्चित्य सन्देशपुनर्प्रयासरणनीतयः विन्यस्य समर्थयति ।

10. संकर मेघः तथा पार-दत्तांशकेन्द्रः

  • पार-दत्तांशकेन्द्र प्रतिकृति
    प्लग-इन् अथवा मैनुअल् विन्यासस्य माध्यमेन, RabbitMQ उच्चदत्तांश-उपलब्धतां आपदापुनर्प्राप्तिक्षमतां च सुनिश्चित्य विभिन्नदत्तांशकेन्द्रयोः मध्ये सन्देशप्रतिकृतिं समर्थयति

एतानि उन्नतविशेषतानि RabbitMQ इत्येतत् एकं शक्तिशालीं लचीलं च सन्देशप्रसारणमध्यमञ्चं कुर्वन्ति, यत् विभिन्नजटिलवितरितप्रणालीनां अनुप्रयोगपरिदृश्यानां च कृते उपयुक्तं भवति । एतेषां कार्याणां तर्कसंगतरूपेण उपयोगेन उच्चप्रदर्शनयुक्तं, अत्यन्तं उपलब्धं, मापनीयं च सन्देशप्रणाली निर्मातुं शक्यते ।

वसन्तकाले सामान्य उन्नतकार्यं कथं कार्यान्वितं कर्तव्यम् :

1. संस्थापनं विन्यासश्च

प्रथमं, सुनिश्चितं कुर्वन्तु यत् भवान् स्वस्य परियोजनायां Spring AMQP निर्भरतां प्रवर्तयति:

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

अस्ति application.properties सञ्चिकायां RabbitMQ संयोजनसूचना विन्यस्यताम्:

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

2. पङ्क्तयः, विनिमयकाः, बन्धनानि च घोषयन्तु

Spring इत्यस्मिन् @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. सन्देशस्य पुष्टिः

मैनुअल् सन्देशपुष्टिः

उपभोक्तारः सन्देशसंसाधनस्य विश्वसनीयतां सुनिश्चित्य सन्देशानां हस्तचलितरूपेण पुष्टिं कर्तुं शक्नुवन्ति ।उपयुञ्जताम्‌@RabbitListener एनोटेशनं कुर्वन्, भवान् विन्यस्तुं शक्नोतिacknowledgeMode कृतेMANUAL, तथा च पद्धत्या सन्देशस्य हस्तचलितरूपेण पुष्टिं कुर्वन्तु:

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. सन्देशव्यवहारः

RabbitTemplate इत्यस्य माध्यमेन लेनदेनसमर्थनं कार्यान्वितं कुर्वन्तु:

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. मृतपत्रपङ्क्तिः

मृताक्षरपङ्क्तिं तस्य बन्धनानि च विन्यस्यताम्:

@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. विलम्बपङ्क्तिः

विलम्बपङ्क्तिं कार्यान्वितुं प्लग-इन् इत्यस्य उपयोगं कुर्वन्तु, तथा च सन्देशस्य TTL (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. समवर्ती उपभोक्तारः

विन्यासद्वारा SimpleRabbitListenerContainerFactory समवर्ती उपभोक्तृणां कार्यान्वयनम् : १.

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. प्लग-इन् तथा एक्सटेंशन

RabbitMQ इत्यस्य प्लग-इन्-कार्यस्य लाभं गृहाण, यथा क्रॉस्-क्लस्टर-सन्देशान् अग्रे प्रेषयितुं Shovel प्लग-इन्-इत्यस्य उपयोगः, अथवा निरीक्षणाय प्रबन्धनाय च प्रबन्धन-प्लगिन्-इत्यस्य उपयोगः