首页 > 其他分享 >HelloWorld,最简单的使用方式

HelloWorld,最简单的使用方式

时间:2022-11-20 11:11:56浏览次数:54  
标签:false String 方式 队列 HelloWorld 简单 import true channel

生产者

package org.example.helloworld;

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

import java.io.IOException;
import java.time.LocalDateTime;
import java.util.concurrent.TimeoutException;

public class Send {
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] args) throws IOException, TimeoutException {
        //TCP 物理连接
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("192.168.121.200");
        try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {
            // 宣布队列
            // 形参:
            // queue – 队列的名称
            // durable – 如果我们声明一个持久队列,则为true(该队列将在服务器重启后继续存在)
            // exclusive – 如果我们声明的是独占队列(仅限于此连接),则为true
            // autoDelete – 如果我们声明一个自动删除队列(当不再使用时,服务器将删除它),则为true
            // arguments – 队列的其他属性(构造参数)
            // 返回值:
            // a declaration-方法来指示队列已成功声明
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            String message = "Hello World!" + LocalDateTime.now();


            // 发布消息。发布到不存在的交换将导致通道级协议异常,从而关闭通道。
            // 如果资源驱动的警报生效,通道#basicPublish的调用将最终阻塞。
            // 形参:
            // exchange – 交换机名称
            // routingKey – 队列名称
            // props – 其他属性
            // message - 路由头
            // body – 消息正文
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
            System.out.println(" [x] Sent '" + message + "'");
        }
    }
}

消费者

package org.example.helloworld;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class Recv {
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("192.168.121.200");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        // 宣布队列
        // 形参:
        // queue – 队列的名称
        // durable – 如果我们声明一个持久队列,则为true(该队列将在服务器重启后继续存在)
        // exclusive – 如果我们声明的是独占队列(仅限于此连接),则为true
        // autoDelete – 如果我们声明一个自动删除队列(当不再使用时,服务器将删除它),则为true
        // arguments – 队列的其他属性(构造参数)
        // 返回值:
        // a declaration-方法来指示队列已成功声明
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);

        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

        // 使用服务器生成的consumerTag启动非本地、非独占的消费者。
        // 仅提供对basic.deliver和basic.cancel AMQP方法的访问(这对于大多数情况来说已经足够了)。
        // 查看具有消费者参数的方法,以访问所有应用程序回调。
        //形参:
        // queue – 队列名称
        // autoAck – 如果服务器认为消息一经传递即被确认,则为true,如果服务器需要显式确认,则为false
        // callback – 消费者对象的接口
        //返回值:
        // 服务器生成的消费者标签
        channel.basicConsume(QUEUE_NAME, false, new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                String message = new String(body, StandardCharsets.UTF_8);
                System.out.println(" [x] Received '" + message + "'");
                //签收消息,确认消息
                //envelope.getDeliveryTag() 获取这个消息的TagId
                //false只确认签收当前的消息,设置为true的时候则代表签收该消费者所有未签收的消息
                channel.basicAck(envelope.getDeliveryTag() , false);
            }
        });

    }
}

标签:false,String,方式,队列,HelloWorld,简单,import,true,channel
From: https://www.cnblogs.com/xl4ng/p/16908057.html

相关文章

  • 非对称加密方式
    一、概念非对称加密方式:使用不同秘钥进行加密解密的是非对称加密方式,使用同一秘钥进行加密解密的是对称加密方式。公钥、私钥:公共的、对外的秘钥称为公钥。私人的,不对外......
  • Mybatis 入门实战(2)--简单使用
    本文主要介绍Mybatis的实际使用,相关的环境及软件信息如下:Mybatis3.5.11。1、工程整体结构这里使用Maven来构建样例工程,工程目录结构如下:2、引入依赖<dependency......
  • 自己制作AM启动方式,不需要每次输入密码和用户名
    第一布,查看用户名,数据库等信息在记事本中写以下信息,保存后,后缀改为bat,双击此文件即可启动hulldesign模块且无黑框框的控制台哦C:\AVEVA\Marine\OH12.1.SP4\marine.bat......
  • 力扣744(java&python)- 寻找比目标字母大的最小字母(简单)
    题目:给你一个排序后的字符列表letters,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。在比较时,字母是依序循......
  • Git基础.TWO(一些简单的操作命令)
    前篇我们讲解了如何创建一个简单的git项目:https://www.cnblogs.com/Ayako/p/16905560.html接下来我们来了解一下git的一些简单操作命令1.了解git的三个区在使用命令操作......
  • java——集合——Map集合——Map集合遍历键找值方式
                                                        ......
  • jforum 论坛简单资料
    开源列表中有很多,感觉写的不错的是一个个人写的lforum,但是代码还没有完全完成,如果自己有时间可以使用这个,进行继续开发。​​http://www.open-open.com/09.htm​​......
  • 01 创建型模式-简单工厂模式
    一、简单工厂模式抽象产品类:将要批量生产的对象实体进行一个抽象提取,便于扩展更多实体,比如手机类;具体产品类:继承抽象产品,将产品实例化。比如小米手机、华为手机等;工厂......
  • UE5 - Blender - 关于高度贴图 nanite的选择处理方式
    UE5虚幻里新的nanite功能,在对于建模方面的改变非常大,对于新的系统下资产模型的优化,我们做一个思考。————————————————————————在UE4中,模型的细节......
  • spring boot 应用 systemd 管理简单说明
    基于systemd的springboot应用管理有一个比较方便的能力,就是不用复杂的java进程处理了,应用发布只需要进行jar文件的copy处理,然后就是服务的重启了systemctlrestart......