RabbitMQ(三) HelloWorld 单生产者单消费者示例实现
一、创建Maven工程,引入RabbitMQ依赖。
pom.xml 如下:
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId><artifactId>RabbitMQ</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.6.0</version></dependency></dependencies>
</project>
二、创建获取连接工具类 ConnectionUtils
通过创建连接工厂对象,并进行响应的设值操作之后,通过newConntection方法我们获取到一个新的连接。
package com.xiaohui.rabbitmq.utils;import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;public class ConnectionUtils {public static Connection getConnection() throws IOException, TimeoutException {//创建连接工厂ConnectionFactory connectionFactory = new ConnectionFactory();//设置主机地址connectionFactory.setHost("172.18.255.186");//设置连接端口connectionFactory.setPort(5672);//设置虚拟主机地址connectionFactory.setVirtualHost("/myhost");//设置链接用户名以及密码connectionFactory.setUsername("xiaohui");connectionFactory.setPassword("root");//创建连接Connection connection = connectionFactory.newConnection();return connection;}
}
通过官网资料查看如果不设置用户密码等信息,系统会默认的给一些初始化值,通过源码我们也可以看到。
三、创建Producter.java 编写生产者代码
在编写消息发送代码时,我们首先需要获取Connection链接对象。在进行信道创建、声明消息队列信息、发送消息等步骤进行发送消息到mqserver上。然后可以进行关闭渠道以及连接对象。
其中通过源码注解我们可以知道在声明消息队列时一些相关参数含义:
Queue.DeclareOk queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete,
Map<String, Object> arguments) throws IOException;
第一个参数表示消息队列名称;第二个参数表示是否独占链接、第三个表示是否持久化消息(mq重启后之前的消息还存在不丢失)、第四个表示是否自动在不使用时自动删除队列(不是删除消息)
package com.xiaohui.rabbitmq.simple;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.xiaohui.rabbitmq.utils.ConnectionUtils;
import java.io.IOException;
import java.util.concurrent.TimeoutException;/*** 生产者*/
public class Producer {public static final String QUEUE_NAME = "simple_queue";public static void main(String[] args) throws IOException, TimeoutException {Connection connection = ConnectionUtils.getConnection();//创建渠道Channel channel = connection.createChannel();//声明创建队列channel.queueDeclare(QUEUE_NAME,true,false, false, null);//发送消息String msg = "再来一条hahahah。。。。";channel.basicPublish("",QUEUE_NAME,null,msg.getBytes());//释放资源(关闭渠道 以及连接)channel.close();connection.close();}
}
四、创建Cunsumer.java 编写消费者代码
主要步骤:
- 获取连接对象
- 使用连接对象创建信道
- 声明和生产者相同的消息队列
- 创建一个消息监听对象,并实现一个完成接受的一个回调函数实现信息打印(非必须)
- 设置开始监听
package com.xiaohui.rabbitmq.simple;import com.rabbitmq.client.*;
import com.xiaohui.rabbitmq.utils.ConnectionUtils;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class Cunsumer {public static void main(String[] args) throws IOException, TimeoutException {//创建消费端链接Connection connection = ConnectionUtils.getConnection();//创建消费端渠道Channel channel = connection.createChannel();//声明消费队列channel.queueDeclare(Producer.QUEUE_NAME, true,false,false,null);//监听消息DefaultConsumer consumer = new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("路由的key为:"+envelope.getRoutingKey());System.out.println("交换机为:"+envelope.getExchange());System.out.println("消息ID为:"+envelope.getDeliveryTag());System.out.println("收到的消息为:"+new String(body,"UTF-8"));System.out.println("=====================================");}};/*** 第二个参数表示是否 向mqserver自动回复收到* 第三个参数表示消息回调*/channel.basicConsume(Producer.QUEUE_NAME,true,consumer);//这里不关闭资源}}
RabbitMQ(三) HelloWorld 单生产者单消费者示例实现相关推荐
- 操作系统(二十五)吸烟者问题-单生产者多消费者问题
2.3.8 吸烟者问题-单生产者多消费者问题 假设一个系统有三个抽烟者进程和一个供应者进程.每个抽烟者不停地卷烟并抽掉它,但是要卷起并抽掉一支烟,抽烟者需要有三种材料:烟草.纸和胶水.三个抽烟者中,第 ...
- 并发无锁队列学习(单生产者单消费者模型)
1.引言 本文介绍单生产者单消费者模型的队列.依据写入队列的内容是定长还是变长,分为单生产者单消费者定长队列和单生产者单消费者变长队列两种. 单生产者单消费者模型的队列操作过程是不须要进行加锁的.生产 ...
- kafka查看broker上主副本_Kafka基础(一):基本概念及生产者、消费者示例
本文章大部分内容均摘自 朱忠华老师的<深入理解Kafka:核心设计与实践原理>,也特别推荐广大读者购买阅读. 一.概述 1. 简介 Kafka 起初是由 LinkedIn 公司采用 Sca ...
- 从现在开始学 Kafka:SpringBoot 集成 Kafka,生产者与消费者示例
从现在开始学 Kafka:SpringBoot 集成 Kafka,生产者与消费者示例 前言 加依赖 生产者 加配置 生产者代码示例 消费者 加配置 消费者监听器示例 调用 关于 Serializer ...
- RabbitMQ入门4:生产者、消费者演示;多个消费者平均压力、公平派遣;
说明: (1)内容说明: ● 这儿我们会创建一个项目,演示RabbitMQ最基础的内容: 通过,这个最简单的例子,先了解:如何使用RabbitMQ,如何连接RabbitMQ,如何发送消息,如何接收消息 ...
- 多线程-线程间通信-多生产者多消费者示例
1.多线程-线程间通信-多生产者多消费者问题 多生产者和多消费者.等待唤醒机制. 产生了两个问题: 1.出现了多次连续生产,未消费,或者一个商品被消费多次. 解决:必须要--------每一个被唤醒的 ...
- Rabbitmq 消息对列 生产者与消费者的具体实现 springboot
RabbitMQ 基本介绍 RabbitMQ的设计理念是.只要有接收消息的队列. 邮件就会存放到队列里. 直到订阅人取走. . 如果没有可以接收这个消息的消息队列. 默认是抛弃这个消息的.. 我实现的 ...
- RabbitMQ入门学习系列(二),单生产者消费者
友情提示 我对我的文章负责,发现好多网上的文章 没有实践,都发出来的,让人走很多弯路,如果你在我的文章中遇到无法实现,或者无法走通的问题.可以直接在公众号<爱码农爱生活 >留言.必定会再次 ...
- RabbitMq(七) Topic模式介绍及代码示例
概述: 在上一文章中我们介绍了路由模式(Routing),routing模式是不同的消息队列绑定了不同的路由key,但是我们看出路由key为固定的字符串标记.而本章中的Topic模式则为在路由模式下, ...
最新文章
- 两步设置:visual studio code(vscode)如何设置文本自动换行
- fastjson 循环json字符串_FastJson拒绝服务漏洞分析
- Redux专题:实用
- 解决方法WindowsError: [Error 193] %1 is not a valid Win32 application
- DCMTK:定义信号灯,互斥锁和读/写锁的类
- c# 串口SerialPort
- CSS3的弹性盒子flex详解(2)
- JavaXml教程(十)XML作为属性文件使用
- 牛客网 【每日一题】4月15日 Treepath
- 打钱!我的数据库被黑客勒索了!
- html载入hta文件,HTA文件去除html控件认证和接收命令行参数
- 全球10大受欢迎的顶级编程语言与薪资水平
- 网站的版面设计,商业Web站点设计策略,网站CI形象设计,网页色彩的搭配
- 选择易优cms建站的十大理由
- vmware虚拟机WinXp sp3的系统cpu占用100%的解决方案
- 第16章Stata面板数据分析
- uvc control
- 3 个 Linux 中快速检测端口的小技巧
- SpringBoot+Vue+mybatis生成pdf文件(表头跟页码,适应上传linux服务器后的操作)
- html实现文字移动的特效
热门文章
- 一个利用sql 语句来实现分页的存储过程
- Eclipse导入Zookeeper源码Version2017.11.3
- Linux性能优化-磁盘RAID
- Mybatis调用oracle 存储过程
- 将dll制作成控件_如何将皮料剪切成想要的大小?制作皮具几种裁剪工具和使用方法...
- 解决谷歌浏览器所有页面崩溃问题
- 数据结构(一)——二叉树的性质与两种遍历方法
- bug记录:虚拟机ping不通外网
- java线程知识体系
- linux 堆的作用,闭包、对象,以及堆“族” | Linux 中国