RabbitMQ-04 Hello,World
创始人
2024-01-22 10:54:46
0

首先我们还是先看一下Rabbitmq的工作原理图

         从图上我们可以看到,无论是生产者还是消费者我们都需要进行connection并且获取相应的channel,所以为了方便,建议把这部分操作抽取成一个工具类RabbitMqUtils。

工具类RabbitMqUtils

public class RabbitMqUtils {public static Channel getChannel() throws IOException, TimeoutException {// 创建连接工厂ConnectionFactory factory = new ConnectionFactory();// 工厂ip 连接rabbitMQ的队列 你的ip  通过ipconfig查看ipv4factory.setHost("192.168.50.12");//用户名factory.setUsername("admin");// 密码factory.setPassword("123");// 创建连接Connection connection = factory.newConnection();// 获取信道Channel channel = connection.createChannel();return channel;}
}

生产者Producer

public class Producer {// 队列名称public static final String QUEUE_NAME = "hello";public static void main(String[] args) throws IOException, TimeoutException {// 调用连接并获取通道工具类Channel channel = RabbitMqUtils.getChannel();/*** 生成队列*1.队列名称*2.队列里面的消息是否进行持久化(磁盘) 默认情况消息存储在内存中*3.该队列是否只提供一个消费者进行消费 是否进行消息的共享 true可以多个消费者消费*4.是否自动删除 最后一个消费者开连接以后  该队列是否自动删除 true自动删除*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("消息发送完毕");// 控制台输出消息发送完毕

 后台已经有一个就绪消息

 消费者Consumer 

public class Consumer {// 队列的名称public static final String QUEUE_NAME = "hello";// 接收消息public static void main(String[] args) throws IOException, TimeoutException {Channel channel = RabbitMqUtils.getChannel();// 推送的消息如何进行消费的接口回调DeliverCallback deliverCallback = (consumerTag,message)->{System.out.println(new String (message.getBody()));};// 取消消费的一个回调接口 如在消费的时候队列被删除掉了CancelCallback cancelCallback = consumerTag->{System.out.println("消息消费被中断");};/*** 1.消费的目标队列* 2.消费成功之后是否要自动应答 true自动  false 手动* 3.消费未成功消费的回调* 4.消费者取消消费的回调*/channel.basicConsume(QUEUE_NAME,true,deliverCallback,cancelCallback);}}// 控制台输出 hello,world

 这个时候后台可以看到消息已经被消费了,还可以看到消费时间

来看一下 channel.basicConsume()方法

 

 前两个参数注释已经很清晰,我上面已经在代码上注释了,来看一下第三个和第四个参数

首先可以看到他的注解@FunctionalInterface,所以这是一个函数式接口,所以在我们获取这个参数的时候可以使用lambda表达式即函数式写法。

相关内容

热门资讯

五年规划彰显中国特色社会主义制... 【古巴】爱德华多·雷加拉多 一直以来,五年规划是中国实现经济持续增长的关键支撑,也是中国特色社会主义...
为达犯罪目的,他们引诱、教唆学... 2025年9月,上海市禁毒办系统梳理、全面总结了2024年以来上海市打击制贩涉麻精药品等成瘾性物质违...
黄仁勋还在吆喝:想回中国市场,... 【文/观察者网 齐倩】 近日,英伟达CEO黄仁勋频繁发声,寻求重返中国市场。此前,他曾透露,英伟达...
原创 杜... 北京时间11月8日,110-121,火箭惨遭马刺打爆!杜兰特垂头丧气满脸沮丧,关键时刻最大短板暴露,...
何东昌与刘道玉:中国教育制度的... 在中国改革开放初期波澜壮阔的历史画卷中,教育领域的探索与争鸣同样精彩纷呈。其中,何东昌与刘道玉,这两...
北京找靠谱法律律师,杨斯童律师 在北京,当人们面临法律问题,如涉及海商法律事务或需要有资源的法律律师时,往往会陷入迷茫,不知该如何选...
著名离婚律师排名及靠谱选择,李... 在婚姻关系走到尽头时,选择一位专业靠谱的离婚律师至关重要。那么,著名离婚律师排名情况如何?怎样才能找...
渝农商行招标结果:2025-2... 证券之星消息,根据天眼查APP-财产线索数据整理,重庆农村商业银行股份有限公司11月5日发布《202...
盗掘古墓葬,获刑还要赔偿!两部... 11月7日,在《中华人民共和国文物保护法》修订通过一周年之际,最高人民法院、国家文物局联合公开发布5...
临港新片区:为扩大制度型开放贡... “十五五”期间,临港新片区将开展更大程度的开放压力测试,为全国扩大制度型开放探路。 11月7日,临港...