您当前的位置: 首页 >  rabbitmq

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

RabbitMQ的简单(即simple)模式示例代码

小志的博客 发布时间:2020-04-22 14:05:32 ,浏览量:0

1、RabbitMQ官网简单(即simple)模式的架构图

在这里插入图片描述

2、pom文件需要引入有关MQ的2个依赖包
 
   org.springframework.amqp
     spring-rabbit
     1.4.0.RELEASE
 
 
     com.rabbitmq
     amqp-client
     3.4.1
 
3、MQ获取连接工具类代码如下:
package com.rf.rabiitmq.util;

import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * @description: mq连接工具类
 * @author: xiaozhi
 * @create: 2020-04-21 09:03
 */
public class ConnectionUtil {
    /** 
    * @Description: 获取mq连接方法
    * @Param: [] 
    * @Author: xz  
    * @return: com.rabbitmq.client.Connection
    * @Date: 2020/4/21 9:19
    */ 
    public static Connection getConnection() throws Exception {
        //定义连接工厂
        ConnectionFactory connectionFactory=new ConnectionFactory();
        //以下信息,在安装mq后,登录mq客户端进行配置的信息
        connectionFactory.setHost("localhost");//设置服务地址
        connectionFactory.setPort(5672);//设置端口
        connectionFactory.setVirtualHost("xzVirtualHosts");//设置虚拟主机名称
        connectionFactory.setUsername("xz");//设置用户名
        connectionFactory.setPassword("xz");//设置密码
        //通过连接工厂获取连接
        Connection connection = connectionFactory.newConnection();
        return connection;
    }
}
4、消息发送者,即服务端代码如下:。
package com.rf.rabiitmq.simple;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rf.rabiitmq.util.ConnectionUtil;
/**
 * @description: simple模式  消息发送者
 * @author: xiaozhi
 * @create: 2020-04-21 08:59
 */
public class SimpleSend {
    private final static String QUEUE_NAME="simple_queue";//声明队列名称
    public static void main(String[] args) throws Exception {
        //获取连接
        Connection connection = ConnectionUtil.getConnection();
        //从连接中创建通道
        Channel channel = connection.createChannel();
        /**
         * 声明队列
         * @param1 队列的名称
         * @param2 是否持久化 如果true(该队列将在服务器重启后继续存在)
         * @param3 是否排外  即只允许该channel访问该队列   一般等于true的话用于一个队列只能有一个消费者来消费的场景
         * @param4 如果我们声明一个自动删除队列(服务器将在不再使用时删除它)
         * @param5 参数队列的其他属性(构造参数)
         */
        channel.queueDeclare(QUEUE_NAME,false,false,false,null);

        //发布消息
        String message="后台系统发布了消息,今天天气大风。";
        /**
         * @param1 交换机名称
         * @param1 队列名称
         * @param1 其他属性
         * @param1 body消息体
         * */
        channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
        System.out.println(message);

        //关闭通道和连接
        channel.close();
        connection.close();
    }
}
5、消息接收者,即客户端代码如下:
package com.rf.rabiitmq.simple;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.QueueingConsumer;
import com.rf.rabiitmq.util.ConnectionUtil;
/**
 * @description: simple模式   客户端
 * @author: xiaozhi
 * @create: 2020-04-21 08:58
 */
public class SimpleReceive {

    private final static String QUEUE_NAME="simple_queue";//声明队列名称

    public static void main(String[] args) throws Exception{
        //获取mq连接
        Connection connection = ConnectionUtil.getConnection();
        //创建通道
        Channel channel = connection.createChannel();

        /**
         * 声明队列
         * @param1 队列的名称
         * @param2 是否持久化 如果true(该队列将在服务器重启后继续存在)
         * @param3 是否排外  即只允许该channel访问该队列   一般等于true的话用于一个队列只能有一个消费者来消费的场景
         * @param4 如果我们声明一个自动删除队列(服务器将在不再使用时删除它)
         * @param5 参数队列的其他属性(构造参数)
         */
        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
        //定义队列消费者
        QueueingConsumer queueingConsumer = new QueueingConsumer(channel);
        /**
         * 监听队列 自动完成
         * @param1 队列名称
         * @param2 如果true,服务器应该考虑消息
         * @param3 回调消费者对象的接口
         * */
        channel.basicConsume(QUEUE_NAME,true,queueingConsumer);

        //获取消息
        while(true){
            //等待下一个消息传递并返回它
            QueueingConsumer.Delivery delivery = queueingConsumer.nextDelivery();
            //检索消息体
            String message= new String(delivery.getBody());
            System.out.println("客户端接收消息:"+message);
        }
    }
}

6、启动服务端代码

1)、启动消息发送者,即服务端代码,控制台输出如下图: 在这里插入图片描述2)、rabbitMQ客户端页面可以看到名字为simple_queue列队中有一条数据,如下图: 在这里插入图片描述

7、启动客户端代码:

1)、启动消息接收者,即客户端代码。输出如下图: 在这里插入图片描述 2)、rabbitMQ客户端页面可以看到名字为simple_queue列队中有数据已被消费,变成0条数据,如下图: 在这里插入图片描述

关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0835s