RabbitMQ—入门搭建工程

目录

1、需求

2、步骤

3、搭建工程实例

1.1、创建工程

1.2、添加依赖

1.3、编写生产者

1.4、编写消费者


1、需求

        使用简单模式为例搭建环境完成消息传递

2、步骤

        ①  创建工程(生产者、消费者)

        ② 分别添加依赖

        ③ 编写生产者发送消息

        ④ 编写消费者接收消息

3、搭建工程实例

1.1、创建工程

① 创建生产者

② 创建消费者

1.2、添加依赖

<dependencies>
    <dependency>
         <groupId>com.rabbitmq</groupId>
         <artifactId>amqp-client</artifactId>
         <version>5.6.0</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
        </configuration>
        </plugin>
    </plugins>
</build>

1.3、编写生产者

/**
 * 生产者:往消息中间件上发送消息
 */
public class Producer {

    public static final String QUEUE_NAME = "simple_queue";//队列名称

    public static void main(String[] args) throws Exception {
        // 1、创建工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("192.168.137.118");
        connectionFactory.setPort(5672);//AMQP协议
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("admin");

        // 2、创建连接
        Connection connection = connectionFactory.newConnection();

        // 3、创建信道
        Channel channel = connection.createChannel();

        /**
         * 4、声明队列
         *
         * queue :队列名称
         * durable:如果是true,声明一个持久化队列。 (服务器重启队列是否存活)
         * exclusive 如果是true,这个队列只限于当前连接使用。连接关闭,队列就删除了
         * autoDelete 如果是true,则声明一个自动删除的队列。 (队列长时间不使用,服务器将删除它)
         * arguments 队列的属性设置
         */

        channel.queueDeclare(QUEUE_NAME, true, false, false, null);

        /**
         * 5、发送消息
         *
         * exchange 将消息发布到哪个交换机,需要提供交换机名称。简单消息模型底层提供默认的交互机。
         * routingKey 路由绑定名称。简单消息模型只需要设置队列的名称即可。
         * props 消息属性配置。设置消息头信息等
         * body 消息内容
         */
        String msg = "Hello,Rabbit!";

        channel.basicPublish("", QUEUE_NAME, null, msg.getBytes());

        // 6.关闭对象(信道)
        channel.close();
        connection.close();
    }

}

 在执行上述的消息发送之后;可以登录rabbitMQ的管理控制台,可以发现队列和其消息:

 

1.4、编写消费者


/**
 * 消费者:从中间件中获取消息,处理信息
 */
public class Consumer1 {

    public static final String QUEUE_NAME = "simple_queue";// 声明一个常量作为队列名(要求与生产者一样)

    public static void main(String[] args) throws Exception {
        // 1、创建工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("192.168.137.118");
        connectionFactory.setPort(5672);//AMQP协议
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("admin");

        //2.创建连接
        Connection connection = connectionFactory.newConnection();

        //3.创建信道
        Channel channel = connection.createChannel();

        //4、声明队列
        /**
         * 参数列表:
         *  1、queue 队列名称
         *  2、durable 如果是true,声明一个持久化队列。 (服务器重启队列是否存活)
         *  3、exclusive 如果是true,这个队列只限于当前连接使用。连接关闭,队列就删除了。
         *  4、autoDelete 如果是true,则声明一个自动删除的队列。 (队列长时间不使用,服务器将删除它)
         *  5、arguments 队列的属性设置
         */
        channel.queueDeclare(QUEUE_NAME, true, false, false, null);

        //5、创建消费者消费信息
        Consumer consumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope,
                                       AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("consumerTag = " + consumerTag);
                System.out.println("envelope.getDeliveryTag() = " + envelope.getDeliveryTag()); //相当于id
                System.out.println("envelope.getExchange() = " + envelope.getExchange());
                System.out.println("envelope.getRoutingKey() = " + envelope.getRoutingKey());
                System.out.println("properties = " + properties);
                System.out.println("body = " + new String(body));
            }
        };
        /**
         * 参数列表含义:
         * 1、指定消费的队列
         * 2、如果true表示消息一旦获取就直接确认。如果false表示消息需要手动确认。
         * 3、回调方法(一旦确认就回调)
         */
        channel.basicConsume(QUEUE_NAME, false, consumer);

        //消费者无需关闭对象,一旦生产者来了信息随时处理
    }
}

运行程序可发现,rabbitmq管理控制台的消息从队列上消失,消费者取出消息,并且控制台打印出消息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值