pom文件:

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.rabbitmq</groupId>
  4. <artifactId>amqp-client</artifactId>
  5. <version>5.0.0</version>
  6. </dependency>
  7.  
  8. <dependency>
  9. <groupId>org.springframework.amqp</groupId>
  10. <artifactId>spring-rabbit</artifactId>
  11. <version>2.0.2.RELEASE</version>
  12. </dependency>
  13.  
  14. <dependency>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-web</artifactId>
  17. </dependency>
  18.  
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter-amqp</artifactId>
  22. </dependency>
  23. </dependencies>

连接工具类:

  1. package top.wj.rabbitmq.client.utils;
  2.  
  3. import com.rabbitmq.client.Channel;
  4. import com.rabbitmq.client.Connection;
  5. import com.rabbitmq.client.ConnectionFactory;
  6.  
  7. import java.util.HashMap;
  8. import java.util.Map;
  9.  
  10. public class ChannelUtils {
  11. public static Channel getChannelInstance(String connectionDescription) {
  12. try {
  13. ConnectionFactory connectionFactory = getConnectionFactory();
  14. Connection connection = connectionFactory.newConnection(connectionDescription);
  15. return connection.createChannel();
  16. } catch (Exception e) {
  17. throw new RuntimeException("获取Channel连接失败");
  18. }
  19. }
  20.  
  21. private static ConnectionFactory getConnectionFactory() {
  22. ConnectionFactory connectionFactory = new ConnectionFactory();
  23.  
  24. // 配置连接信息
  25. connectionFactory.setHost("127.0.0.1");
  26. connectionFactory.setPort(5672);
  27. connectionFactory.setVirtualHost("/");
  28. connectionFactory.setUsername("guest");
  29. connectionFactory.setPassword("guest");
  30.  
  31. // 网络异常自动连接恢复
  32. connectionFactory.setAutomaticRecoveryEnabled(true);
  33. // 每10秒尝试重试连接一次
  34. connectionFactory.setNetworkRecoveryInterval(10000);
  35.  
  36. return connectionFactory;
  37. }
  38. }

创建生产者:

  1. package top.wj.rabbitmq.client.producer;
  2.  
  3. import com.rabbitmq.client.AMQP;
  4. import com.rabbitmq.client.BuiltinExchangeType;
  5. import com.rabbitmq.client.Channel;
  6. import top.wj.rabbitmq.client.utils.ChannelUtils;
  7.  
  8. import java.io.IOException;
  9. import java.util.HashMap;
  10. import java.util.concurrent.TimeoutException;
  11.  
  12. public class MessageProducer {
  13. public static void main(String[] args) throws IOException, TimeoutException {
  14. Channel channel = ChannelUtils.getChannelInstance("队列消息生产者");
  15.  
  16. // 声明交换机 (交换机名, 交换机类型, 是否持久化, 是否自动删除, 是否是内部交换机, 交换机属性);
  17. channel.exchangeDeclare("rabbitmq.wj", BuiltinExchangeType.DIRECT, true, false, false, new HashMap<>());
  18.  
  19. // 设置消息属性 发布消息 (交换机名, Routing key, 可靠消息相关属性 后续会介绍, 消息属性, 消息体);
  20. AMQP.BasicProperties basicProperties = new AMQP.BasicProperties().builder().deliveryMode(2).contentType("UTF-8").build();
  21. channel.basicPublish("rabbitmq.wj", "add", false, basicProperties, "body中的消息内容!".getBytes());
  22. }
  23. }

创建消费者:

  1. package top.wj.rabbitmq.client.consumer;
  2.  
  3. import com.rabbitmq.client.*;
  4. import top.wj.rabbitmq.client.utils.ChannelUtils;
  5.  
  6. import java.io.IOException;
  7. import java.util.HashMap;
  8. import java.util.concurrent.TimeoutException;
  9.  
  10. public class MessageConsumer {
  11. public static void main(String[] args) throws IOException, TimeoutException {
  12. Channel channel = ChannelUtils.getChannelInstance("队列消息消费者");
  13.  
  14. // 声明队列 (队列名, 是否持久化, 是否排他, 是否自动删除, 队列属性);
  15. AMQP.Queue.DeclareOk declareOk = channel.queueDeclare("rabbitmq.wj.add", true, false, false, new HashMap<>());
  16.  
  17. // 声明交换机 (交换机名, 交换机类型, 是否持久化, 是否自动删除, 是否是内部交换机, 交换机属性);
  18. channel.exchangeDeclare("rabbitmq.wj", BuiltinExchangeType.DIRECT, true, false, false, new HashMap<>());
  19.  
  20. // 将队列Binding到交换机上 (队列名, 交换机名, Routing key, 绑定属性);
  21. channel.queueBind(declareOk.getQueue(), "rabbitmq.wj", "add", new HashMap<>());
  22.  
  23. // 消费者订阅消息 监听如上声明的队列 (队列名, 是否自动应答(与消息可靠有关 后续会介绍), 消费者标签, 消费者)
  24. DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
  25. @Override
  26. public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
  27. System.out.println(consumerTag);
  28. System.out.println(envelope.toString());
  29. System.out.println(properties.toString());
  30. System.out.println("消息内容:" + new String(body));
  31. }
  32. };
  33. channel.basicConsume(declareOk.getQueue(), true, "消费者标签",defaultConsumer );
  34. }
  35. }

控制台打印信息:

  1.  
  2. 消费者标签
  3. Envelope(deliveryTag=1, redeliver=false, exchange=rabbitmq.wj, routingKey=add)
  4. #contentHeader<basic>(content-type=UTF-8, content-encoding=null, headers=null, delivery-mode=2, priority=null, correlation-id=null, reply-to=null, expiration=null, message-id=null, timestamp=null, type=null, user-id=null, app-id=null, cluster-id=null)
  5. 消息内容:body中的消息内容!

rabbitmq管理界面显示:

RabbitMQ的使用(五)RabbitMQ Java Client简单生产者、消费者代码示例的更多相关文章

  1. Java设计模式之生产者消费者模式

    Java设计模式之生产者消费者模式 博客分类: 设计模式 设计模式Java多线程编程thread 转载 对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的.就像学习每一门编程语言一 ...

  2. 第23章 java线程通信——生产者/消费者模型案例

    第23章 java线程通信--生产者/消费者模型案例 1.案例: package com.rocco; /** * 生产者消费者问题,涉及到几个类 * 第一,这个问题本身就是一个类,即主类 * 第二, ...

  3. java多线程解决生产者消费者问题

    import java.util.ArrayList; import java.util.List; /** * Created by ccc on 16-4-27. */ public class ...

  4. java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-【费元星Q9715234】

    java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-[费元星Q9715234] 说明如下,不懂的问题直接我[费元星Q9715234] 1.反射的意义在于不将xml tag ...

  5. java多线程模拟生产者消费者问题,公司面试常常问的题。。。

    package com.cn.test3; //java多线程模拟生产者消费者问题 //ProducerConsumer是主类,Producer生产者,Consumer消费者,Product产品 // ...

  6. JAVA多线程之生产者 消费者模式 妈妈做面包案例

    创建四个类 1.面包类 锅里只可以放10个面包 ---装面包的容器2.厨房 kitchen 生产面包 和消费面包  最多生产100个面包3.生产者4消费者5.测试类 多线程经典案例 import ja ...

  7. Java数据结构之队列的实现以及队列的应用之----简单生产者消费者应用

    Java数据结构之---Queue队列 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在 ...

  8. Java里的生产者-消费者模型(Producer and Consumer Pattern in Java)

    生产者-消费者模型是多线程问题里面的经典问题,也是面试的常见问题.有如下几个常见的实现方法: 1. wait()/notify() 2. lock & condition 3. Blockin ...

  9. JAVA NIO工作原理及代码示例

    简介:本文主要介绍了JAVA NIO中的Buffer, Channel, Selector的工作原理以及使用它们的若干注意事项,最后是利用它们实现服务器和客户端通信的代码实例. 欢迎探讨,如有错误敬请 ...

随机推荐

  1. MySQL Explain详解 查看mysql语句详情

    在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有 ...

  2. acwing 651. 逛画展

    地址 https://www.acwing.com/problem/content/653/ 博览馆正在展出由世上最佳的 M 位画家所画的图画. wangjy想到博览馆去看这几位大师的作品. 可是,那 ...

  3. LG1840 Color the Axis 线段树

    菜的人就要写简单题 为了练习手速来写这样一道 珂朵莉树 线段树简单题 没啥可说的,注意修改操作中要判一下 val=0 #include<bits/stdc++.h> using names ...

  4. python调用C++ DLL 传参技巧

    结构体传参:http://www.jb51.net/article/52513.htm 准备工作: C++文件(cpp):(注意在函数声明上加上extern "C" 的修饰) #i ...

  5. vscode源码分析【五】事件分发机制

    第一篇: vscode源码分析[一]从源码运行vscode 第二篇:vscode源码分析[二]程序的启动逻辑,第一个窗口是如何创建的 第三篇:vscode源码分析[三]程序的启动逻辑,性能问题的追踪 ...

  6. python做中学(八)匿名函数lambda的用法

    匿名函数,顾名思义即没有名称的函数,和def定义的函数的最大区别在于匿名函数创建后返回函数本身(即匿名函数不需要return来返回值),表达式本身结果就是返回值,而def创建后则赋值给一个变量名,在P ...

  7. 记一个bootstrap定制container导致页面X轴出现横向滚动条的坑

     壹 ❀ 引 在bootstrap定制时,因为UI给的图纸的页面主体部分宽度为1200px,所以我将container容器宽度从默认的1170px改成了1200px,随后在页面缩小的调试过程中发现了页 ...

  8. 【swoole】结合swoole 和 nsq 的实际应用

    集合 swoole 的框架设计 为了减少理解度,我尽量的从源头开始引入 1. nsq 案例中是使用 swoole 结合一个php 框架实现的是 NSQ 订阅功能. 启动命令: sudo bash /w ...

  9. 如何使用pm2一键部署node应用

    准备工作 准备一台linux服务器(本文档以阿里centos为例) 安装nodejs.git.pm2等环境 项目代码 本地已经安装用于连接 Linux 实例的工具,如 Xshell 基本流程 前两步传 ...

  10. 【深度学习】K-L 散度,JS散度,Wasserstein距离

    度量两个分布之间的差异 (一)K-L 散度 K-L 散度在信息系统中称为相对熵,可以用来量化两种概率分布 P 和 Q 之间的差异,它是非对称性的度量.在概率学和统计学上,我们经常会使用一种更简单的.近 ...