其他分享
首页 > 其他分享> > Rabbitmq点对点通信

Rabbitmq点对点通信

作者:互联网

1.导入依赖

<!--指定 jdk 编译版本-->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>8</source>
                <target>8</target>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <!--rabbitmq 依赖客户端-->
    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>5.8.0</version>
    </dependency>
    <!--操作文件流的一个依赖-->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
    </dependency>
</dependencies>

2.生产者代码

/**
 * @autor 王启蒙
 * @create 2021/10/4 18:05
 */
public class Producer {
    //队列名称
    public static final String QUEUE_NAME = "hello";

    //发消息
    public static void main(String[] args)  {
        //创建一个连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //工厂IP 连接RabbitMq的队列
        factory.setHost("116.62.242.245");
        //用户名
        factory.setUsername("admin");
        //密码
        factory.setPassword("123");


        //创建连接
        try {
          Connection connection =  factory.newConnection();
          //获取信道
            Channel channel = connection.createChannel();
            /**
             *生成一个队列
             * 1.队列名称
             * 2.队列里面的消息是否持久化 默认情况下消息存储在内存中
             *   持久化表示存储在磁盘中
             * 3.该队列是否只供一个消费者进行消费,是否进行消息共享,true可以多个消费者消费
             *   false只能一个消费者消费
             * 4.是否主动删除,最后一个消费者开队列后。该队列是否主动删除
             * 5,其它参数
             *
             */

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

            //发消息
            String message = "hello world";
            /**
             * 发送一个消息
             * 1.发送到哪一个交换机
             * 2.路由的Key值是哪个,本次是队列的名称
             * 3.表示其它参数信息
             * 4.发送的消息的消息体
             */
            channel.basicPublish("",QUEUE_NAME,null,message.getBytes());

            System.out.println("消息发送完毕");





        } catch (Exception e) {
            e.printStackTrace();
        }


    }


}

3.消费者代码

/**
 * @autor 王启蒙
 * @create 2021/10/4 19:28
 */
public class Consumer {
    //队列名称
    public static final String QUEUE_NAME = "hello";

    //接收消息
    public static void main(String[] args) {
        //创建链接工厂
        ConnectionFactory factory = new ConnectionFactory();

        factory.setHost("116.62.242.245");
        //用户名
        factory.setUsername("admin");
        //密码
        factory.setPassword("123");

        try {
            Connection connection = factory.newConnection();

            Channel channel = connection.createChannel();

            /**
             * 消费者接收消息
             * 1.消费那个队列
             * 2.消费成功后是否自动应答
             * 3.消费者未成功消费的回调
             * 4.消费者取消消费的回调
             */
            System.out.println("等待接收消息....");
            //推送的消息如何进行消费的接口回调
            DeliverCallback deliverCallback = (consumerTag,delivery)->{
                String message= new String(delivery.getBody());
                System.out.println(message);

            };

            //取消消费的一个回调接口 如在消费的时候队列被删除掉了
            CancelCallback cancelCallback=(consumerTag)->{
                System.out.println("消息消费被中断");
            };


            channel.basicConsume(QUEUE_NAME,true,deliverCallback,cancelCallback);



        } catch (Exception e) {
            e.printStackTrace();
        }


    }



}

开启一个生产者

image-20211004221713831

开启一个消费者接收消息

image-20211004221747777

标签:String,队列,点对点,通信,Rabbitmq,factory,QUEUE,消息,public
来源: https://blog.csdn.net/weixin_43906724/article/details/121605670