2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
RabbitMQ एकः व्यापकरूपेण प्रयुक्तः मुक्तस्रोतसन्देशदलालः अस्ति यः बहुविधसन्देशप्रोटोकॉलसमर्थयति तथा च वितरितप्रणालीषु विश्वसनीयसन्देशप्रसारणस्य कृते उपयोक्तुं शक्यते । मूलभूतसन्देशपङ्क्तिकार्यक्षमतायाः अतिरिक्तं, RabbitMQ उन्नतविशेषताः अपि प्रदाति ये उच्चउपलब्धतायाः, मापनीयतायाः, लचीलतायाः च दृष्ट्या तस्य क्षमतां वर्धयन्ति अत्र केचन मुख्याः उन्नतविशेषताः सन्ति ।
दर्पणयुक्ताः पङ्क्तयः:
RabbitMQ कतारस्य स्थितिं सन्देशान् च बहुनोड्-मध्ये प्रतिकृत्य कतारस्य उच्च-उपलब्धतां प्राप्तुं दर्पण-कतार-कार्यं प्रदाति । यदि मुख्यनोड् विफलः भवति तर्हि दर्पणपङ्क्तौ प्रतिकृतिनोड् प्रति निर्विघ्नस्विचओवरः सम्भवति ।
क्लस्टर मोड:
RabbitMQ क्लस्टर मोड् मध्ये चालयितुं शक्नोति, प्रणाली उपलब्धतां मापनीयतां च सुधारयितुम् अनेकनोड् मध्ये कतारं एक्सचेंजरं च वितरितुं शक्नोति । क्लस्टर् मध्ये नोड्स् परस्परं संवादं कर्तुं शक्नुवन्ति तथा च सन्देशस्य कतारस्य मेटाडाटा च साझां कर्तुं शक्नुवन्ति ।
सन्देश आभार:
उपभोक्तारः संसाधितसन्देशान् स्वीकुर्वितुं शक्नुवन्ति येन ते नष्टाः न भवन्ति इति सुनिश्चितं भवति । यदि सन्देशः न स्वीकृतः तर्हि RabbitMQ अन्यैः उपभोक्तृभिः संसाधनार्थं पुनः पङ्क्तौ स्थापयति ।
व्यवहारः:
RabbitMQ AMQP लेनदेनविधिं समर्थयति, यत् उत्पादकान् सन्देशान् प्रकाशयितुं लेनदेनस्य अन्तः सन्देशान् पुष्टयितुं च अनुमतिं ददाति यत् सन्देशानां परमाणुत्वं स्थिरतां च सुनिश्चितं करोति
निरन्तर सन्देश:
RabbitMQ दलालस्य पुनः आरम्भस्य अनन्तरं सन्देशाः नष्टाः न भवन्ति इति सुनिश्चित्य सन्देशान् स्थायित्वेन चिह्नितुं शक्नोति । निरन्तरं सन्देशाः केवलं स्मृतौ न संगृहीताः न अपितु डिस्कमध्ये लिख्यन्ते ।
टिकाऊ पङ्क्तयः:
दलालस्य पुनः आरम्भस्य अनन्तरं निरन्तरं पङ्क्तिः स्थास्यति, यत् पङ्क्तिमेटाडाटा न नष्टः इति सुनिश्चितं करोति ।
बैच आभार:
उपभोक्तृभ्यः बैच-रूपेण सन्देशान् पुष्टयितुं, संजालस्य तथा I/O-उपरिभारस्य न्यूनीकरणाय, तथा च थ्रूपुट्-सुधारस्य अनुमतिं ददातु ।
पूर्वागमन गणना:
प्रीफेच् गणनां सेट् कृत्वा उपभोक्ता निर्दिष्टसङ्ख्यायाः सन्देशानां संसाधनानन्तरं पङ्क्तितः नूतनान् सन्देशान् आनयन् सन्देशानां समवर्तीप्रक्रियाकरणं नियन्त्रयितुं शक्नोति
प्लगइन प्रणाली:
RabbitMQ एकं लचीलं प्लग-इन्-प्रणालीं प्रदाति, तथा च उपयोक्तारः कार्यक्षमतां वर्धयितुं प्लग-इन् लोड्-अनलोड् कर्तुं शक्नुवन्ति । यथा, Shovel प्लगिन् इत्यस्य उपयोगः समूहेषु सन्देशान् अग्रे प्रेषयितुं भवति, तथा च Federation प्लगिन् इत्यस्य उपयोगः भौगोलिकस्थानेषु वितरितसन्देशान् वितरितुं भवति ।
प्रबन्धन प्लगइन:
RabbitMQ उदाहरणानां निरीक्षणाय प्रबन्धनाय च जाल-आधारितं उपयोक्तृ-अन्तरफलकं प्रदाति, यत्र कतार-स्थितिः, स्विच-विन्यासः, सन्देश-दरः इत्यादयः द्रष्टुं शक्यन्ते ।
TLS/SSL एन्क्रिप्शन:
RabbitMQ संचरणकाले सन्देशानां सुरक्षां सुनिश्चित्य सन्देशसञ्चारगोपनार्थं TLS/SSL इत्यस्य उपयोगं समर्थयति ।
अभिगमननियन्त्रणम्:
RabbitMQ उपयोक्तृषु, भूमिकासु, अनुमतिषु च आधारितं अभिगमनियन्त्रणतन्त्रं प्रदाति, यत् प्रशासकाः सूक्ष्म-कणिका-प्रवेश-अनुमतिः विन्यस्तुं शक्नुवन्ति ।
विभिन्न प्रकाराः आदानप्रदानाः (Exchanges) २.:
RabbitMQ अनेकप्रकारस्य स्विचस्य समर्थनं करोति, यत्र विभिन्नसन्देशमार्गनिर्देशनआवश्यकतानां पूर्तये Direct, Topic, Fanout तथा Headers स्विचः सन्ति ।
बन्धनानि:
जटिलसन्देशमार्गनिर्देशनरणनीतयः कार्यान्वितुं बाइण्डिंग्द्वारा कतारं आदानप्रदानं च संयोजयन्तु ।
निगरानीयसूचकाः (Metrics) 1.1.:
RabbitMQ विस्तृतनिरीक्षणसूचकाः प्रदाति, यत्र सन्देशदरः, कतारदीर्घता, संयोजनानां संख्या इत्यादयः सन्ति, येन प्रशासकाः प्रणाल्याः संचालनस्थितिं अवगन्तुं शक्नुवन्ति
अलार्म एवं सूचनाएँ:
RabbitMQ सूचनां प्रेरयितुं अलार्मं विन्यस्तुं शक्नोति यदा कतारदीर्घता सीमां अतिक्रमति अथवा नोड् विफलं भवति ।
मृत-पत्र-आदान-प्रदानं पङ्क्तयः च:
यदा सन्देशः उपभोक्तुं न शक्यते अथवा पुनः प्रयासानां संख्या अतिक्रान्तं भवति तदा अग्रे संसाधनार्थं मृतपत्रपङ्क्तौ अग्रे प्रेषयितुं शक्यते ।
सन्देश पुनः प्रयासं कुर्वन्तु:
उपभोगस्य विफलतायां उपभोगस्य पुनः प्रयासः कर्तुं शक्यते इति सुनिश्चित्य सन्देशपुनर्प्रयासरणनीतयः विन्यस्य समर्थयति ।
एतानि उन्नतविशेषतानि RabbitMQ इत्येतत् एकं शक्तिशालीं लचीलं च सन्देशप्रसारणमध्यमञ्चं कुर्वन्ति, यत् विभिन्नजटिलवितरितप्रणालीनां अनुप्रयोगपरिदृश्यानां च कृते उपयुक्तं भवति । एतेषां कार्याणां तर्कसंगतरूपेण उपयोगेन उच्चप्रदर्शनयुक्तं, अत्यन्तं उपलब्धं, मापनीयं च सन्देशप्रणाली निर्मातुं शक्यते ।
प्रथमं, सुनिश्चितं कुर्वन्तु यत् भवान् स्वस्य परियोजनायां Spring AMQP निर्भरतां प्रवर्तयति:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
अस्ति application.properties
सञ्चिकायां RabbitMQ संयोजनसूचना विन्यस्यताम्:
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
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");
}
}
उपभोक्तारः सन्देशसंसाधनस्य विश्वसनीयतां सुनिश्चित्य सन्देशानां हस्तचलितरूपेण पुष्टिं कर्तुं शक्नुवन्ति ।उपयुञ्जताम्@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);
}
}
}
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");
}
}
}
मृताक्षरपङ्क्तिं तस्य बन्धनानि च विन्यस्यताम्:
@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);
}
विलम्बपङ्क्तिं कार्यान्वितुं प्लग-इन् इत्यस्य उपयोगं कुर्वन्तु, तथा च सन्देशस्य 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);
}
विन्यासद्वारा 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;
}
}
RabbitMQ इत्यस्य प्लग-इन्-कार्यस्य लाभं गृहाण, यथा क्रॉस्-क्लस्टर-सन्देशान् अग्रे प्रेषयितुं Shovel प्लग-इन्-इत्यस्य उपयोगः, अथवा निरीक्षणाय प्रबन्धनाय च प्रबन्धन-प्लगिन्-इत्यस्य उपयोगः