RabbitMQ的工作模式之一简单(Simple)模式

天大地大妈咪最大 提交于 2020-03-10 10:36:44

RabbitMQ的工作模式之一简单(Simple)模式

由一个生产者,一个消费者组成,消息通过FIFO模式排队。

导入依赖

<!--RabbitMQ的依赖-->
<dependency>
  <groupId>com.rabbitmq</groupId>
  <artifactId>amqp-client</artifactId>
  <version>5.7.3</version>
</dependency>

首先创建工具类,用以生成连接,避免重复书写此段代码

public class RabbitMQUtil {
    private static ConnectionFactory factory = new ConnectionFactory();
    static{
        //用户名
        factory.setUsername("hello");
        //密码
        factory.setPassword("123456");
        //虚拟机
        factory.setVirtualHost("/myhost");
        //IP地址,运行rabbitmq组件的主机ip地址
        factory.setHost("192.168.31.14");
        //端口
        factory.setPort(5672);
    }

    public static Connection getConnection(){
        Connection connection = null;
        try {
            connection = factory.newConnection();
            return  connection;
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }
        return null;
    }
}

生产者端代码

public class Producer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //通过工具类获取连接
        Connection connection = RabbitMQUtil.getConnection();
        //通道:与rabbitmq建立通信的信道
        Channel channel = connection.createChannel();
        //声明一个队列:因为要将消息发送到队列中
        //参数一:队列名称,有则使用,无则创建
        //参数二:是否进行持久化 false表示不进行持久化
        //参数三:是否私有化,false表示不进行私有化,true表示私有化:只有第一次使用该队列的消费者才可以使用此队列
        //参数四:表示连接关闭后,是否自动删除该对列,false表示不删除
        //参数五: 扩展参数,额外的一配置
        channel.queueDeclare("myqueue",false,false,false,null);
        //发布消息
        //参数一: 是交换机的名称,目前暂时不用
        //参数二: 对列的名称,表示向哪个队列发送消息
        //参数三:是额外的配置
        //参数四: 发送的消息
        channel.basicPublish("","myqueue",null,"这是一条消息".getBytes());
        //关闭通道
        channel.close();
        connection.close();
        System.out.println("发送成功");
    }
}

消费者端代码

public class Consumer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //通过工具类获取连接
        Connection connection = RabbitMQUtil.getConnection();
        //创建通道
        final Channel channel = connection.createChannel();
        //声明一个队列,无则创建,有则直接使用
        //队列名称、是否持久化、是否私有化、是否自动删除、扩展参数
        channel.queueDeclare("myqueue",false,false,false,null);

        //签收消息
        //参数1:消费队列的对列名称
        //参数2:true表示自动签收消息,false表示手动编程的方式签收
        //参数3:是处理签收消息的回调方法
        channel.basicConsume("myqueue",false,new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("接收到的消息:"+new String(body));
                //确认签收消息
                //参数1:是消息的tag(Id)
                //参数2:表示是否批量签收,false表示只签收当前消息,true表示签收小于当前tag编号的所有消息
                channel.basicAck(envelope.getDeliveryTag(),false);
            }
        });
        //关闭通道
        channel.close();
        //关闭连接
        connection.close();
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!