Java RabbitMQ کا سب سادہ قطار موڈ پرودیوسر اور کنسیومر سے مشتمل ہے۔
فی الحال، جاوا عمل RabbitMQ کامِل طور پر سپرنگ بوٹ کے spring-boot-starter-amqp
پیکج کا استعمال کرتا ہے، جو عملاً قطار کو چلانے کے لئے سپرنگ AMQP استعمال کرتا ہے۔
1. مقدماتی ہدایت نامہ
براہ کرم متعلقہ علم کو سمجھنے کے لئے مندرجہ ذیل فصول کو پڑھیں:
2. اعتماد پذیر پیکیج
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
3. RabbitMQ کو تشکیل دیں
application.yml
کنفیگریشن کو ترتیب دیں:
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
4. قطار کی تصدیق کریں
سپرنگ بوٹ تشکیل کرنے والی کنفیگریشن کلاس کے ذریعے قطار کو تشکیل دیں:
package com.tizi365.rabbitmq.config;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QueueConfig {
@Bean
public Queue helloQueue() {
// قطار کو تصدیق کریں، اور قطار کا نام یکتا ہونا چاہئے
return new Queue("hello");
}
}
مشورہ: آپ بزنس کی ضرورتوں کے مطابق مختلف قطارات تعین کر سکتے ہیں۔ قطار کا نام اور Queue کا بین id صرف مختلف ہونا چاہئے۔ یہاں، میتھڈ نیم بین id ہے۔
5. پیغام بھیجیں
پیغام بھیجنے کے لئے رابطہٹیمپلیٹ کلاس درکار ہوتا ہے، جسے سپرنگ بوٹ نے پہلے ہی بنا دیا ہے۔ بس اس نمونے کو انجیکٹ کریں:
package com.tizi365.rabbitmq.service;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class SendService {
// رابطہٹیمپلیٹ انسٹینس کو انجیکٹ کریں
@Autowired
private RabbitTemplate template;
// پہلے سے تعین شدہ قطار کو انجیکٹ کریں
@Autowired
@Qualifier("helloQueue")
private Queue helloQueue;
// تجاویز کے لئے، ہمعاملہ کو دسویں سیکڑے کے استعمال شدہ مناسب مہلت کے ذریعے ترتیب دینے کے لئے ہمت کرتے ہیں (ہر سیکنڈ ایک پیغام)
@Scheduled(fixedDelay = 1000, initialDelay = 1000)
public void send() {
// پیغام مواد
String message = "Hello World!";
// پیغام بھیجیں
// پہلا مقامی ہوتی ہے، یہاں ہم قطار کا نام استعمال کرتے ہیں جیسا کہ روٹنگ کی طرح
// دوسرا تفصیل پیغام مواد ہے، جو برآمد ہے کسی بھی قسم کا جب تک یہ سیریلائزیشن کاٹھنا سپورٹ کرتا ہے
template.convertAndSend(helloQueue.getName(), message);
System.out.println("پیغام '" + message + "' بھیج رہے ہیں");
}
}
مشورہ: یہاں ہم براہ کرم ایکسچینج مستقیم طور پر استعمال نہیں کر رہے ہیں۔ نیچے کا تشکیل بنیادی ایکسچینج (مستقیم ایکسچینج) استعمال ہوگا۔
6. پیغام وصول کریں
مصرف کے لئے پیغام وصول کرنا بھی آسان ہے:
package com.tizi365.rabbitmq.listener;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
// پیغام لسنر کو تعیین کریں، پیشن قطار کے ذریعے سننے کے لئے `queues` پیرامیٹر کے ذریعے قطار کا نام وضاحت کریں
@RabbitListener(queues = "hello")
public class HelloListener {
// پیغام ہینڈلر کو نشان زد کرنے کے لئے رابطہ ہینڈلر استعمال کریں، جو پیغام فراہم کرنے کے لئے موادی منطق کو انجام دینے کے لئے استعمال ہوتی ہے
@RabbitHandler
public void receive(String msg) {
System.out.println("کنسیومر - پیغام '" + msg + "' وصول ہوا");
}
}
7. انوکھی میسج کی قسم
پہلے، ہم نے ایک کسٹم ٹائپ کے پیغام بھیجا۔ حقیقی کاروباری مواقع میں ہمیں مختلف قسم کے جاوا آبجیکٹ کی مختارہ بھیجنا بہتر ہوگا۔
ایک انٹٹٹی آبجیکٹ کی تعریف
package com.tizi365.rabbitmq.domain;
import java.io.Serializable;
import lombok.Data;
// بلاگ مواد
@Data
public class Blog implements Serializable {
// شناختی نمبر
private Integer id;
// عنوان
private String title;
}
کسٹم ٹائپ کے پیغام بھیجیں
Blog blog = new Blog();
blog.setId(100);
blog.setTitle("Tizi365 RabbitMQ tutorial");
// پیغام بھیجیں
template.convertAndSend(helloQueue.getName(), blog);
کسٹم ٹائپ میسجز وصول کریں
@RabbitHandler
// صرف میں میتھڈ کا پیرامیٹر کسٹم میسج کی قسم میں تبدیل کریں
public void receive(Blog msg) {
System.out.println("Consumer - میسج موصول ہوا ہے '" + msg.getTitle() + "'");
}
میسج مواد کے لئے JSON ترتیب استعمال کریں
جب ریبٹ ایم کیو بھیجتا ہے جاوا اینٹٹی آبجیکٹ ڈیٹا، تو یہ دیفالٹ طور پر جی ڈی کے آبجیکٹ سیریلائزیشن ٹول کا استعمال کرتا ہے۔ ہم اسے چیزوں کو پڑھنے اور سمجھنے کے لئے جیسن فارمیٹ کا استعمال کرنے کے لئے تبدیل کرسکتے ہیں۔
پہلے کنفیگریشن کلاس میں تبدیلی کریں اور مندرجہ ذیل ترتیب شامل کریں کہ جیکسن جیسن پارسر کو میسج ڈیٹا سیریلزیشن اور ڈی سیریلائزیشن کرنے کے لئے استعمال ہو۔
@Bean
public Jackson2JsonMessageConverter messageConverter() {
// ڈیفالٹ میسج کنورٹر کو سیٹ کریں
return new Jackson2JsonMessageConverter();
}