0
点赞
收藏
分享

微信扫一扫

java connectioin rabbit-mq

颜娘娘的碎碎念 2022-03-12 阅读 63
javarabbitmq

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();
    }

}

举报

相关推荐

0 条评论