【README】

本文使用java 连接rabbitmq,模拟生产者,消费者场景

【1】项目搭建

1)maven项目,依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.hello</groupId><artifactId>rabbitmqtest</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client --><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.11.0</version></dependency></dependencies>
</project>

2)生产者


package com.hello.rabbitmqtest.simple;import com.hello.trong.rabbitmqtest.util.MyDateUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;public class Producer {/*** 队列名称 */static final String QUEUE_NAME = "simple_queue2";public static void main(String[] args) throws Exception {// 创建连接工厂 ConnectionFactory connFactory = new ConnectionFactory();// 主机地址,默认为 localhostconnFactory.setHost("192.168.163.201");;connFactory.setPort(5672);// 设置虚拟主机
//      connFactory.setVirtualHost("/hello");// 设置账号密码 connFactory.setUsername("guest");connFactory.setPassword("guest");// 创建连接Connection conn = connFactory.newConnection();// 创建频道Channel channel = conn.createChannel();/*** 创建队列* 队列名称, 是否持久化队列,是否独占本次连接,是否在不使用的时候自动删除队列, 队列其他参数; */channel.queueDeclare(QUEUE_NAME, false, false, false, null);// 发送消息  String message = "【simple_queue2】 hello rabbitmq now is " + MyDateUtil.getNow();channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));System.out.println("生产者发送消息" + message);// 关闭通道和连接channel.close();conn.close(); }
}
// 日期工具类
public class MyDateUtil {public static void main(String[] args) {}public static String getNow() {return getNow("yyyy-MM-dd hh:mm:ss.SSS");}public static String getNow(String format) {SimpleDateFormat formater = new SimpleDateFormat(format);String dateFormated = formater.format(new Date());return dateFormated; }
}

3)消费者

package com.hello.rabbitmqtest.simple;import java.io.IOException;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.AMQP.BasicProperties;/*** rabbitmq 消费者*/
public class MyConsumer {/*** 队列名称 */static final String QUEUE_NAME = "simple_queue2";public static void main(String[] args) throws Exception {// 创建连接工厂 ConnectionFactory connFactory = new ConnectionFactory();// 主机地址,默认为 localhostconnFactory.setHost("192.168.163.201");;connFactory.setPort(5672);// 设置虚拟主机connFactory.setVirtualHost("/");// 设置账号密码 connFactory.setUsername("guest");connFactory.setPassword("guest");// 创建连接Connection conn = connFactory.newConnection();// 创建频道Channel channel = conn.createChannel();// 声明要关注的队列 channel.queueDeclare(QUEUE_NAME, false, false, false, null);System.out.println("customer wait to receive message");// 告诉服务器,我们需要哪个频道的角色,如果频道中有消息,就会执行回调函数 handleDeliveryConsumer consumer = new DefaultConsumer(channel) {/*** @param consumerTag 消费者标签,在 channel.basicConsume 可以指定   * @param envelope 消息包内容,包括消息id,消息routingkey,交换机,消息和重转标记(收到消息失败后是否需要重新发送) * @param properties 基本属性* @param body 消息字节数组  */@Overridepublic void handleDelivery(String consumerTag, Envelope envelope,BasicProperties properties, byte[] body) throws IOException {System.out.println("路由key=" + envelope.getRoutingKey());System.out.println("交换机=" + envelope.getExchange());System.out.println("消息id=" + envelope.getDeliveryTag()); String message = new String(body, "UTF-8");System.out.println(String.format("消费者收到的消息【%s】", message)); System.out.println("============================================="); } };// 自动恢复队列应答 -- rabbitmq中的消息确认机制  channel.basicConsume(QUEUE_NAME, true, consumer); }
}

【2】 测试效果

// 生产者
生产者发送消息【simple_queue2】 hello rabbitmq now is 2021-02-28 12:01:23.926// 消费者
路由key=simple_queue2
交换机=
消息id=3
消费者收到的消息【【simple_queue2】 hello rabbitmq now is 2021-02-28 12:01:23.926】
=============================================

rabbitmq-java生产者消费者相关推荐

  1. java消费者模式_基于Java 生产者消费者模式(详细分析)

    生产者消费者模式是多线程中最为常见的模式:生产者线程(一个或多个)生成面包放进篮子里(集合或数组),同时,消费者线程(一个或多个)从篮子里(集合或数组)取出面包消耗.虽然它们任务不同,但处理的资源是相 ...

  2. java 生产者消费者代码_Java生产者和消费者代码

    java 生产者消费者代码 This also helps us to understand the concept of synchronised multi-threading in java, ...

  3. java生产线消费者,基于Java 生产者消费者模式(详细分析)

    生产者消费者模式是多线程中最为常见的模式:生产者线程(一个或多个)生成面包放进篮子里(集合或数组),同时,消费者线程(一个或多个)从篮子里(集合或数组)取出面包消耗.虽然它们任务不同,但处理的资源是相 ...

  4. java 生产者消费者_基于JAVA的生产者消费者问题

    一.需求分析 为了更好地理解进程同步的机制和过程,决定设计实现生产者消费者问题的解决,以实现进程的同步控制. 题目描述:有n个生产者在生产产品,这些产品将提供给m个消费者去消费,为了使生产者和消费者能 ...

  5. java 生产者消费者同步_经典线程同步问题(生产者消费者)--Java实现

    原创作品,转载请注明出自xelz's blog 生产者-消费者(producer-consumer)问题是一个著名的线程同步问题.它描述的是:有一群生产者线程在生产产品,并将这些产品提供给消费者线程去 ...

  6. java 生产者消费者_Java多线程:线程间通信—生产者消费者模型

    一.背景 && 定义 多线程环境下,只要有并发问题,就要保证数据的安全性,一般指的是通过 synchronized 来进行同步. 另一个问题是, 多个线程之间如何协作呢 ? 我们看一个 ...

  7. Java生产者 消费者模型的一种实现

    本文主要介绍java中生产者/消费者模式的实现,对java线程锁机制的一次深入理解. 生产者/消费者模型 生产者/消费者模型要保证,同一个资源在同一时间节点下只能被最多一个线程访问,这个在java中用 ...

  8. java 生产者消费者模式_聊聊并发(十)生产者消费者模式

    本文首发于InfoQ   作者:方腾飞  校对:张龙 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题.该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度. 为什么要使 ...

  9. (Java生产者消费者问题)http://blog.csdn.net/jhj735412/article/details/6931135

    转载自:http://blog.csdn.net/jhj735412/article/details/6931135 生产者消费者问题是研究多线程程序时绕不开的问题,它的描述是有一块生产者和消费者共享 ...

  10. JAVA生产者消费者的实现

    春节回了趟老家,又体验了一次流水席,由于桌席多,导致上菜慢,于是在等待间,总结了一下出菜流程的几个特点: 1.有多个灶台,多个灶台都在同时做菜出来. 2.做出来的菜,会有专人用一个托盘端出来,每次端出 ...

最新文章

  1. 微软转向,鸿蒙拥抱,炒房团都来了,Linux 为何引各方英雄竞折腰?
  2. UbbCode用正则替换指定格式的输入实现想要的输出
  3. 新手学C语言会踩到什么样的坑?
  4. 1024电商项目的邮箱验证码与图形验证码功能模块
  5. eclipse ssh mysql_Eclipse 配置SSH 详解
  6. 为什么Linux与众不同?
  7. 用汇编的眼光看C++(之虚函数)
  8. bzoj 4131: 并行博弈(博弈)
  9. Eclipse-project 重命名问题(如何彻底修改Eclipse工程名),4种解法
  10. java计算机毕业设计足球队管理系统源码+数据库+系统+lw文档+mybatis+运行部署
  11. Oracle EBS使用adpatch工具打patch过程【Z】
  12. foxpro导入 mysql_Foxpro DBF数据库转换成SQL Server 6.5表的几种方法
  13. php繁体转为简体的函数,繁体中文转换为简体中文的PHP函数_php
  14. JAVA计算机毕业设计腾讯网游辅助小助手(附源码、数据库)
  15. 网站SEO优化多少钱 网站seo优化费用多少
  16. 调度生产过程的思路、原则、方法
  17. lisp常用函数-颜麓
  18. 2021年森林督查暨森林资源管理“一张图”更新工作方案
  19. QGIS二次开发:加载XYZ Tiles形式的瓦片地图
  20. Linux Deepin 新增英国肯特大学镜像服务

热门文章

  1. CodeCraft-21 and Codeforces Round #711 (Div. 2) 题解
  2. Wizard of Orz CodeForces - 1467A
  3. Strange Partition CodeForces - 1471A
  4. [SNOI2017]遗失的答案 (FWT)
  5. P5021-赛道修建【平衡树,贪心,二分答案】
  6. jzoj3055-比赛【数学,统计】
  7. ssl2644-线段树练习1【线段树】
  8. 【2018.4.7】模拟赛之三-ssl2384 字符串【字符串】
  9. 【贪心】逃跑(jzoj 1748)
  10. 【DP】数字游戏(jzoj 2131)