java connectioin rabbit-mq

该博客介绍了如何使用RabbitMQ进行消息队列的声明、交换机配置、队列绑定和消息处理。通过设置主机地址、端口、用户名和密码创建ConnectionFactory,然后声明direct类型的交换机和持久化的队列,并使用queueBind进行绑定,确保消息传递的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

@Slf4j
@Service
public class MessageService {

    /**
     * 声明消息队列、交换机、绑定、消息处理
     */
    public static void handleMessage() throws IOException, TimeoutException {
        ConnectionFactory connectionFactory = new ConnectionFactory();

        // 配置 RabbitMQ 的主机地址
        connectionFactory.setHost("127.0.0.1");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("admin");

        try(
                Connection connection = connectionFactory.newConnection();
                Channel channel = connection.createChannel()
        ) {

            // 名字:属于什么什么就且在前面

            /* ------- restaurant-------- */

            // 声明交换机
            channel.exchangeDeclare(
                    // 交换机名称 
                    // 建议名称格式 exchange.<服务名>.<目标服务名>
                    "exchange.order.restaurant",
                    // 队列类型 direct 全匹配
                    BuiltinExchangeType.DIRECT,
                    // 是否持久化,必须持久化,防止 rabbitmq 重启数据丢失
                    true,
                    // 如果没有连接,是否自动删除
                    false,
                    // 是否有其他参数,没有所以 null
                    null
            );

            // 声明队列
            channel.queueDeclare(
                    // 队列名称 
                    // queue.<服务名>
                    "queue.order",
                    // 是否持久化
                    true,
                    // 是否独占,这个服务连接这个队列其他服务就不能连接
                    false,
                    // 是否自动删除
                    false,
                    // 是否存在其他参数
                    null
            );

            // 将交换机、队列绑定到一起,并声明 routingKey
            channel.queueBind(
                    "queue.order",
                    "exchange.order.restaurant",
                    "key.order"
            );

            /* ------- deliveryman-------- */

            // 声明交换机
            channel.exchangeDeclare(
                    // 交换机名称 
                    // 建议名称格式 exchange.<服务名>.<目标服务名>
                    "exchange.order.deliveryman",
                    // 队列类型 direct 全匹配
                    BuiltinExchangeType.DIRECT,
                    // 是否持久化,必须持久化,防止 rabbitmq 重启数据丢失
                    true,
                    // 如果没有连接,是否自动删除
                    false,
                    // 是否有其他参数,没有所以 null
                    null
            );

            // 我们接受这个消息,永远都是在一个 队列 上接收
            // 只是这个消息可能是不同 交换机 给我们发送过来的

            // 将交换机、队列绑定到一起,并声明 routingKey
            channel.queueBind(
                    "queue.order",
                    "exchange.order.deliveryman",
                    "key.order"
            );
        }
    }

    public static void main(String[] args) throws IOException, TimeoutException {
        handleMessage();
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值