RabbitMQ使用实例
下面是一个使用Java实现的RabbitMQ示例代码,用于发送和接收消息:
首先,您需要安装RabbitMQ,并确保服务正在运行。
接下来,您可以使用以下示例代码来发送和接收消息:
Sender.java文件:
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class Sender {
private final static String QUEUE_NAME = "hello";
public static void main(String[] args) {
try {
// 创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
// 创建连接
Connection connection = factory.newConnection();
// 创建通道
Channel channel = connection.createChannel();
// 声明队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 发送消息
String message = "Hello, RabbitMQ!";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println("Sent message: " + message);
// 关闭通道和连接
channel.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Receiver.java文件:
import com.rabbitmq.client.*;
public class Receiver {
private final static String QUEUE_NAME = "hello";
public static void main(String[] args) {
try {
// 创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
// 创建连接
Connection connection = factory.newConnection();
// 创建通道
Channel channel = connection.createChannel();
// 声明队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 创建消费者
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) {
String message = new String(body);
System.out.println("Received message: " + message);
}
};
// 开始消费消息
channel.basicConsume(QUEUE_NAME, true, consumer);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在上述示例代码中,Sender类用于发送消息,Receiver类用于接收消息。
在Sender类中,我们创建了一个连接工厂,设置了RabbitMQ服务器的主机地址。然后,我们创建了一个连接和通道,并声明了一个队列。使用basicPublish方法向队列发送消息。最后,关闭通道和连接。
在Receiver类中,我们创建了一个连接工厂,设置了RabbitMQ服务器的主机地址。然后,我们创建了一个连接和通道,并声明了一个队列。创建了一个消费者,覆盖了handleDelivery方法来处理接收到的消息。使用basicConsume方法开始消费消息。
请确保您已正确配置RabbitMQ服务器和相关依赖项,并根据需要更改服务器地址和队列名称。运行Sender和Receiver代码后,您将看到消息从发送者被发送到接收者。
当然!这里是另一个使用Java实现的RabbitMQ示例代码,用于发送和接收带有确认机制的消息:
首先,您需要安装RabbitMQ,并确保服务正在运行。
接下来,您可以使用以下示例代码来发送和接收带有确认机制的消息:
Sender.java文件:
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class Sender {
private final static String QUEUE_NAME = "hello";
public static void main(String[] args) {
try {
// 创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
// 创建连接
Connection connection = factory.newConnection();
// 创建通道
Channel channel = connection.createChannel();
// 声明队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 开启确认模式
channel.confirmSelect();
// 发送消息
String message = "Hello, RabbitMQ!";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println("Sent message: " + message);
// 等待消息确认
if (channel.waitForConfirms()) {
System.out.println("Message confirmed!");
} else {
System.out.println("Message not confirmed!");
}
// 关闭通道和连接
channel.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Receiver.java文件:
import com.rabbitmq.client.*;
public class Receiver {
private final static String QUEUE_NAME = "hello";
public static void main(String[] args) {
try {
// 创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
// 创建连接
Connection connection = factory.newConnection();
// 创建通道
Channel channel = connection.createChannel();
// 声明队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 创建消费者
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) {
String message = new String(body);
System.out.println("Received message: " + message);
try {
// 手动确认消息
channel.basicAck(envelope.getDeliveryTag(), false);
} catch (Exception e) {
e.printStackTrace();
}
}
};
// 关闭自动消息确认
channel.basicConsume(QUEUE_NAME, false, consumer);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在上述示例代码中,Sender类用于发送带有确认机制的消息,Receiver类用于接收消息并手动确认。
在Sender类中,我们创建了一个连接工厂,设置了RabbitMQ服务器的主机地址。然后,我们创建了一个连接和通道,并声明了一个队列。通过调用confirmSelect方法开启确认模式。使用basicPublish方法向队列发送消息。在发送完消息后,通过调用waitForConfirms方法等待消息确认结果,并根据返回结果打印相应的消息确认信息。最后,关闭通道和连接。
在Receiver类中,我们创建了一个连接工厂,设置了Rabbit
MQ服务器的主机地址。然后,我们创建了一个连接和通道,并声明了一个队列。创建了一个消费者,覆盖了handleDelivery方法来处理接收到的消息,并手动确认消息。通过调用basicConsume方法关闭自动消息确认。
请确保您已正确配置RabbitMQ服务器和相关依赖项,并根据需要更改服务器地址和队列名称。运行Sender和Receiver代码后,您将看到消息从发送者被发送到接收者,并且接收者手动确认了消息的处理。
当然!这是另一个使用Java实现的RabbitMQ示例代码,用于发送和接收主题消息:
首先,您需要安装RabbitMQ,并确保服务正在运行。
接下来,您可以使用以下示例代码来发送和接收主题消息:
Sender.java文件:
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class Sender {
private final static String EXCHANGE_NAME = "topic_exchange";
public static void main(String[] args) {
try {
// 创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
// 创建连接
Connection connection = factory.newConnection();
// 创建通道
Channel channel = connection.createChannel();
// 声明交换机
channel.exchangeDeclare(EXCHANGE_NAME, "topic");
// 发送消息
String message = "Hello, RabbitMQ!";
String routingKey = "topic.key";
channel.basicPublish(EXCHANGE_NAME, routingKey, null, message.getBytes());
System.out.println("Sent message: " + message);
// 关闭通道和连接
channel.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Receiver.java文件:
import com.rabbitmq.client.*;
public class Receiver {
private final static String EXCHANGE_NAME = "topic_exchange";
public static void main(String[] args) {
try {
// 创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
// 创建连接
Connection connection = factory.newConnection();
// 创建通道
Channel channel = connection.createChannel();
// 声明交换机
channel.exchangeDeclare(EXCHANGE_NAME, "topic");
// 声明一个临时队列
String queueName = channel.queueDeclare().getQueue();
// 绑定队列到交换机,并指定routingKey
String routingKey = "topic.*";
channel.queueBind(queueName, EXCHANGE_NAME, routingKey);
// 创建消费者
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) {
String message = new String(body);
System.out.println("Received message: " + message);
}
};
// 开始消费消息
channel.basicConsume(queueName, true, consumer);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在上述示例代码中,Sender类用于发送主题消息,Receiver类用于接收消息。
在Sender类中,我们创建了一个连接工厂,设置了RabbitMQ服务器的主机地址。然后,我们创建了一个连接和通道,并声明了一个主题交换机。使用basicPublish方法向交换机发送消息,并指定routingKey。最后,关闭通道和连接。
在Receiver类中,我们创建了一个连接工厂,设置了RabbitMQ服务器的主机地址。然后,我们创建了一个连接和通道,并声明了一个主题交换机。创建了一个临时队列,并将其绑定到交换机上,并指定了相应的routingKey。创建了一个消费者,覆盖了handleDelivery方法来处理接收到
的消息。使用basicConsume方法开始消费消息。
请确保您已正确配置RabbitMQ服务器和相关依赖项,并根据需要更改服务器地址、交换机名称和routingKey。运行Sender和Receiver代码后,您将看到消息从发送者被发送到接收者,并根据routingKey的匹配规则被接收。