RabbitMQ学习(二):客户端开发

news/2024/11/8 0:10:27/

文章目录

    • 1 直接上代码吧
      • 1.1 maven
      • 1.2 配置类
      • 1.3 生产者测试代码
      • 1.4 生产者运行结果
      • 1.5 消费者测试代码
      • 1.6 消费者运行结果
    • 参考

1 直接上代码吧

本篇文章主要展示一个客户端开发Demo。

1.1 maven

maven中需要的配置是直接从官网拷贝的。

<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.8.0</version>
</dependency>

1.2 配置类

主要是放入一些RabbitMQ的参数信息。

public class RabbitMqConstant {public static final String HOST = "127.0.0.1";public static final int PORT = 5672;public static final String VIRTUAL_HOST = "/";public static final String USERNAME = "demouser";public static final String PASSWORD = "demopassword";public static final String EXCHANGE = "demo_exchange";public static final String ROUTING_KEY = "demo_rountingkey";public static final String QUEUE = "demo_queue";
}

1.3 生产者测试代码

public class Producer {public static void main(String[] args) throws IOException, TimeoutException {// 创建一个 ConnectionFactoryConnectionFactory factory = new ConnectionFactory();// 设置相关的配置信息factory.setHost(RabbitMqConstant.HOST);factory.setPort(RabbitMqConstant.PORT);factory.setVirtualHost(RabbitMqConstant.VIRTUAL_HOST);factory.setUsername(RabbitMqConstant.USERNAME);factory.setPassword(RabbitMqConstant.PASSWORD);// 创建连接Connection conn = factory.newConnection();// 创建 ChannelChannel channel = conn.createChannel();String message = "hello world";channel.basicPublish(RabbitMqConstant.EXCHANGE, RabbitMqConstant.ROUTING_KEY,MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());//关闭资源channel.close();conn.close();}
}

这里没有声明交换器和队列是因为我在Web管理页面声明好了,其实也可以通过Channel类下的方法来声明。

1.4 生产者运行结果

可以看到,消息队列中多了一条消息。
运行结果
可以看到,消息已经进入队列中了。

1.5 消费者测试代码

public class MqConsumer {public static void main(String[] args) throws IOException, TimeoutException {// 创建一个 ConnectionFactoryConnectionFactory factory = new ConnectionFactory();// 设置相关的配置信息factory.setHost(RabbitMqConstant.HOST);factory.setPort(RabbitMqConstant.PORT);factory.setVirtualHost(RabbitMqConstant.VIRTUAL_HOST);factory.setUsername(RabbitMqConstant.USERNAME);factory.setPassword(RabbitMqConstant.PASSWORD);// 创建连接Connection conn = factory.newConnection();// 创建ChannelChannel channel = conn.createChannel();Consumer consumer = new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope,AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("消费信息;" + new String(body));channel.basicAck(envelope.getDeliveryTag(), false);}};channel.basicConsume(RabbitMqConstant.QUEUE, consumer);try {// 这里休眠的原因是:main线程是用户线程,而消费线程是守护线程。// 有可能main线程已经结束了,而消费线程还没来得及消费。TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {e.printStackTrace();}channel.close();conn.close();}
}

1.6 消费者运行结果

控制台成功打印出了信息
成功消费信息
而消息队列的消息也被消费掉了。
消费消息

参考

  1. 电子工业出版社,朱忠华 著, 《RabbitMQ实战指南》

http://www.ppmy.cn/news/768911.html

相关文章

Redis的基本概念

文章目录 1 为什么使用Redis2 为什么Redis这么快3 Redis命令参考4 Redis的数据结构4.1 string&#xff08;字符串&#xff09;4.2 list&#xff08;列表&#xff09;4.3 hash&#xff08;字典&#xff09;4.4 set&#xff08;集合&#xff09;4.5 zset&#xff08;有序列表&…

RabbitMQ学习(一):基本概念

文章目录 1 为什么使用RabbitMQ2 为什么RabbitMQ这么快3 AMQP介绍3.1 AMQP的核心概念3.2 AMQP分层&#xff1a; 4 RabbitMQ的整体结构4.1 结构图4.2 不同的交换机类型 5 相关命令5.1 服务相关命令5.2 用户相关命令5.3 虚拟主机相关命令5.4 队列相关命令5.5 集群相关命令 参考 1…

Redis如何备份与恢复数据

文章目录 1 数据持久化1.1 快照1.2 AOF1.3 混合持久化1.4 从节点持久化 1 数据持久化 Redis有自己的持久化机制&#xff0c;以防宕机后内存中的数据丢失。当宕机后&#xff0c;便从磁盘恢复内存数据结构。 1.1 快照 Redis是使用COW机制实现快照持久化。 第一步&#xff1a;…

RabbitMQ学习(三):高级特性

文章目录 1 生产端如何可靠地投递消息1.1 消息落库打标1.2 消息延迟投递&#xff0c;通过二次确认回调检查。 2 生产者确认&#xff08;Confirm消息确认机制&#xff09;3 消息的幂等性保障3.1 唯一ID 指纹码 机制3.2 利用Redis的原子性实现 4 Return消息机制5 消息的分发与消…

Spring事务的一些总结

文章目录 1 Transactional 注解特性2 事务的属性3 事务的嵌套4 事务超时设置5 Transaction注解不回滚的可能原因6 事务的基本要素(ACID)7 事务的原理8 数据并发问题9 数据库隔离级别10 Spring隔离级别11 底层所使用的不同的持久化API或框架 1 Transactional 注解特性 可以在整…

计算机科学与技术万金油专业,盘点工学大类里的“万金油”专业

原标题&#xff1a;盘点工学大类里的“万金油”专业 教育部2012年最新修订的本科生专业名录中把专业重新进行了从学科门类到专业类和专业的划分&#xff0c;共计12大学科门类&#xff0c;分别是理、工、农、医 &#xff0c;管、教、文、艺 经、史、法、哲.92大专业类&#xff0…

程序员的浪漫(使用python画图)比心心(待完善版)

本人给女朋友准备的小惊喜&#xff0c;如有需要可以取用。&#xff08;代码内有注释可根据需要更改&#xff09; #比心&#xff01;&#xff01; import turtle # turtle.bgpic(D:/python/bjtp/aa.jpg) turtle.speed(10)#画笔速度 turtle.setup(1800,700,70,70) turtle.color(b…

一行代码解决判断IE浏览器和提示升级问题

IE8及以下版本提示升级&#xff08;使用IE9和旧版IE支持 if IE 条件注释语句实现&#xff09; <!--[if lte IE 8]><script>alert("您正在使用的浏览器版本过低&#xff0c;为了您的最佳体验&#xff0c;请先升级浏览器。");window.location.href"h…