Java代码操作RabbitMq
使用Java代码创建交换机,队列以及绑定关系
/**
创建connection,根据connection创建channel,这样就形成了代码与RabbitMq的会话通道
*/
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost(主机Ip);
/**
创建连接后,要将连接关闭,因为Connection,Channel都实现了java.lang.AutoCloseable接口,所以我们可以使用
以下的写法,当我们使用完以后,连接会自动关闭
*/
try (Connection connection = connectionFactory.newConnection();
Channel channel = connection.createChannel()) {
/**
创建交换机
第一个参数 交换机的名称
第二个参数 交换机的工作模式
第三个参数 交换机是否被持久化
第四个参数 交换机在没有绑定队列后是否自动删除
第五个参数 一些参数
*/
channel.exchangeDeclare(
"exchange.order.restaurant",
BuiltinExchangeType.DIRECT,
true,
false,
null
);
/**
创建队列
第一个参数 队列的名称
第二个参数 交换机是否被持久化
第三个参数 ...
第四个参数 交换机在没有绑定队列后是否自动删除
第五个参数 一些参数
*/
channel.queueDeclare(
"queue.order",
true,
false,
false,
null
);
/**
将交换机和队列进行绑定
第一个参数 队列的名称
第二个参数 交换机的名称
第三个参数 绑定key的名称
*/
channel.queueBind(
"queue.order",
"exchange.order.restaurant",
"key.order"
);
}
接收和发送消息
发送消息
/**
发送消息
第一个参数 要发送给交换机的名称
第二个参数 交换机和队列的绑定key
第三个参数 某些参数
第四个参数 要发送的消息,需要将消息转换为字节数组进行发送
*/
channel.basicPublish("exchange.order.deliveryman", "key.deliveryman", null, messageToSend.getBytes());
接收消息
/**
接收消息
第一个参数 要接收的队列的名称
第二个参数 是否开启自动确认消息接收
第三个参数 对接收到的参数进行处理
第四个参数 .....
*/
channel.basicConsume("queue.order", true, deliverCallback, consumerTag -> {
});
DeliverCallback deliverCallback = (consumerTag, message) -> {
//消费数据
String messageBody = new String(message.getBody());
//进行一些业务的处理
}