RabbitMq基本使用
时间:2022-07-24
本文章向大家介绍RabbitMq基本使用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
RabbitMq
一、RabbitMq介绍
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件),RabbitMQ服务器是用Erlang语言编写的,所以想要使用 RabbitMQ就必须要安装Erlang语言!
二、RabbitMq之HelloWorld
RabbitMQ和一般的消息传递使用一些术语。 生产者:意味着发送。发送消息的程序是生产者! 队列:消息从生产者产生后保存在队列内部! 消费者:与接收具有相似的含义。一个消费者是一个程序,主要是等待接收信息!
1.基本消息队列图示
P是生产者 用户生产消息将消息放入消息队列,C是消费者 ,从队列里将消息取出
2.发送消息
代码实现如下:
1.方便起见,首先我们写一个工具类用户获取连接
package com.util;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* 获取MQ的连接
* @author Administrator
*/
public class MqConnection {
/**
* 获取连接的方法
* @return
* @throws IOException
* @throws TimeoutException
*/
public static Connection getConnection() throws IOException, TimeoutException {
//连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
//设置服务地址
connectionFactory.setHost("127.0.0.1");
//设置服务端口
connectionFactory.setPort(5672);
//设置登录用户
connectionFactory.setUsername("user");
connectionFactory.setPassword("user");
//设置VirtualHost (相当于数据库 )
connectionFactory.setVirtualHost("/user");
return connectionFactory.newConnection();
}
}
2.开始书写消息的发送方
package com.simp;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.util.MqConnection;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* 消息生产者
* @author huangfu
*/
public class Producer {
private static String QUEUE_NAME = "simp";
public static void main(String[] args) throws IOException, TimeoutException {
//获取连接
Connection connection = MqConnection.getConnection();
//从连接中获取一个通道
Channel channel = connection.createChannel();
/**
*
* 创建队列
* 1.消息队列名
* 2.是否队列持久化
* 3.是否为排他队列
* 4.是否队列自动删除
* 5.配置项
*/
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
/**
* 发送消息
* 1.交换机名字
* 2.队列名字
* 3.配置
* 4.消息体
*/
channel.basicPublish("",QUEUE_NAME,null,"醉卧沙场君莫笑".getBytes());
channel.close();
connection.close();
}
}
至此,消息发送成功,我们需要一个消费者来消费
3.接收消息
package com.simp;
import com.rabbitmq.client.*;
import com.util.MqConnection;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* 消费者
* @author huangfu
*/
public class Coummer {
private static String QUEUE_NAME = "simp";
public static void main(String[] args) throws IOException, TimeoutException {
//获取连接
Connection connection = MqConnection.getConnection();
//创建频道
Channel channel = connection.createChannel();
/**
*
* 创建队列
* 1.消息队列名
* 2.是否队列持久化
* 3.是否为排他队列
* 4.是否队列自动删除
* 5.配置项
*/
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
/**
* 事件触发
* 一旦有消息进入到队列就会触发这个
*/
DefaultConsumer defaultConsumer = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println(new String(body,"UTF-8"));
}
};
/**
* 监听队列
* 1.要监听的队列名称
* 2.是否自动应答 (自动确认消息) 确认后将从队列里删除该条消息
* 3.回调函数
*/
channel.basicConsume(QUEUE_NAME,true,defaultConsumer);
}
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 分享一个Qt写的SMTP邮件客户端(库)
- mysql学习笔记
- MapReduce的常见输入格式之NlineInputFormat
- MapReduce的常见输入格式之KeyValueTextInputFormat
- MapReduce之 FileInputFormat的切片策略(默认)
- MapReduce之片和块的关系
- MapReduce的常见输入格式之CombineTextInputFormat
- MapReduce之Job提交流程
- MapReduce之自定义InputFormat
- MapReduce之MapTask工作机制
- 数据链路层的三个基本问题
- DEBUG ArrayList
- 【PAT甲级】1002 A+B for Polynomials (25分)
- c/c++补完计划(一): 指针常量和常量指针
- 从0到1开发测试平台(六)增加登录接口