在Linux系统中运行并简单的测试RabbitMq容器
以前使用的是Windows下面的RabbitMq,需要先安装 Erlang的语言环境等,这次直接在Linux中的Docker容器来测试一下
1:docker配置RabbitMq的指令
docker run -d --hostname myrabbit --restart=always --name rabbitmq -p 5672:5672 -p 15672:15672
-e RABBITMQ_DEFAULT_USER=fengge -e RABBITMQ_DEFAULT_PASS=qqlove rabbitmq:3-management
指令的含义应该都看得明白,这里不在描述了
2:查看RbbitMq容器已经启起来
3:代码:
Product生产者测试代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace WindowsForms
{
using RabbitMQ.Client;
using RabbitMQ;
using RabbitMQ.Client.Framing.Impl;
using RabbitMQ.Util;
using RabbitMQ.Client.Framing;
using RabbitMQ.Client.Events; public partial class RbbitMqSendMsg : Form
{
private static readonly string queueName = "insert_to_person";
private static readonly string exchangeName = "Insert";
private static readonly string ruterKey = "router.Insert"; /*
direct,fanout,topic,headers
直接, 扇出,主题, 标题
*/
private static readonly string exchangeType = "direct";
private static readonly ConnectionFactory rabitFactory = new ConnectionFactory
{
UserName = "fengge",
Password = "F88",
RequestedHeartbeat = ,
Endpoint = new AmqpTcpEndpoint(new Uri("amqp://192.168.***.***:5672/"))
};
public RbbitMqSendMsg()
{
InitializeComponent();
}
private void SimpelMQ()
{
try
{
//创建一个连接的工厂
using (var conn = rabitFactory.CreateConnection())
{
//类似创建一个管道
using (var channel = conn.CreateModel())
{
//声明一个队列,设置队列是否持久化,排他性,与自动删除
channel.ExchangeDeclare(exchangeName, exchangeType);
channel.QueueDeclare(queueName, true, false, false);
// 绑定消息队列,交换器,routingkey
channel.QueueBind(queueName, exchangeName,routingKey: queueName);
IBasicProperties propertity = channel.CreateBasicProperties();
propertity.Persistent = true;//队列持久化
for (int i = ; i < ; i++)
{
byte[] bymsg = Encoding.UTF8.GetBytes($"我是风格{i},现在时间是:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
channel.BasicPublish(exchangeName, ruterKey, propertity, bymsg);
}
}
}
}
catch (Exception e)
{
throw new Exception(e.Message);
}
} private void SampleTypeSend_Click(object sender, EventArgs e)
{
SimpelMQ();
}
}
}
Consumer消费者测试代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace WindowsForms02
{
using RabbitMQ.Client;
public partial class Form1 : Form
{
private static readonly string queueName = "insert_to_person";
private static readonly string exchangeName = "Insert";
private static readonly string ruterKey = "router.Insert"; /*
direct,fanout,topic,headers
直接, 扇出,主题, 标题
*/
private static readonly string exchangeType = "direct";
private static readonly ConnectionFactory rabitFactory = new ConnectionFactory
{
UserName = "fengge",
Password = "F88",
RequestedHeartbeat = ,
Endpoint = new AmqpTcpEndpoint(new Uri("amqp://192.168.***.***:5672/")),
};
public Form1()
{
InitializeComponent();
System.Threading.Thread t2 = new System.Threading.Thread(() => {
ConsumerMsgSimpleMq();
});
t2.IsBackground = true; t2.Start();
} private void ConsumerMsgSimpleMq()
{
//创建一个连接的工厂
using (var conn = rabitFactory.CreateConnection())
{
//类似创建一个管道
using (var channel = conn.CreateModel())
{
channel.ExchangeDeclare(exchangeName, exchangeType);
//声明一个队列,设置队列是否持久化,排他性,与自动删除
channel.QueueDeclare(queueName, true, false, false);
// 绑定消息队列,交换器,routingkey
channel.QueueBind(queueName, exchangeName, ruterKey);
////定义这个队列的消费者
//QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel);
////false为手动应答,true为自动应答
//channel.BasicConsume(queueName, false, consumer);
while (true)
{
try
{
BasicGetResult result = channel.BasicGet(queueName, false);
if (result != null)
{
byte[] by = result.Body;
string messageStr = Encoding.UTF8.GetString(by);
//如果是自动应答,下下面这句代码不用写啦。
Console.WriteLine("---->" + messageStr);
if (!string.IsNullOrEmpty(messageStr))
{
channel.BasicAck(result.DeliveryTag, false);
}
}
}
catch (Exception)
{
}
}
}
}
}
}
}
4:启动多个客服端,其他的启动我们可以以调试的模式打开客服端
5:测试的效果:
在Linux系统中运行并简单的测试RabbitMq容器的更多相关文章
- 使用mybatis assembly插件打成tar包,在linux系统中运行服务
使用mybatis assembly插件打成tar包,在linux系统中运行服务 assembly插件插件地址: 链接:https://pan.baidu.com/s/1i6bWPxF 密码:gad5 ...
- 『动善时』JMeter基础 — 57、Linux系统中运行JMeter脚本
目录 1.Linux系统中安装Java环境 (1)解压Java安装包 (2)配置Java环境变量 (3)验证Java环境是否配置成功 2.Linux系统中安装JMeter (1)下载JMeter (2 ...
- 学习Linux系统中命令的简单方法
如果说如何快速学习.了解Linux的话,我的答案是学命令.背命令!为何呢?对于一名新手来说,去学习Linux的思想.了解Linux的架构.明白Linux中“一切皆文件”概念虽然说是没有错,是对的.但是 ...
- Anbox —— 在 Linux 系统中运行 Android 应用
具有以下特性: 没有限制:由于 Anbox 运行着整个 Android 系统,所以理论上任何应用都可以在其中运行 安全:Anbox 将 Android APP 放进一个密封的盒子中,无需直接访问硬件或 ...
- 能够在Linux系统中运行的5款大型耐玩游戏
Linux 可能不会很快成为游戏玩家选择的平台 —— Valve Steam Machines 的失败似乎是对这一点的深刻提醒 —— 但这并不意味着该平台没有稳定增长,并且拥有相当多的优秀游戏. 从独 ...
- windows系统下的maven项目放到linux系统中运行时报org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnection这种异常的解决办法
这个错误的解决办法其实很简单你把连接mysql数据库的那个jar包换成linux版本的就行了: linux版本的连接mysql数据库的jar包链接:http://files.cnblogs.com/f ...
- linux系统中运行node进程,无法杀死进程
events.js:72 throw er; // Unhandled 'error' event ^Error: listen EADDRINUSE at errnoException (net.j ...
- Jmeter(五十四) - 从入门到精通高级篇 - 如何在linux系统下运行jmeter脚本 - 上篇(详解教程)
1.简介 上一篇宏哥已经介绍了如何在Linux系统中安装Jmeter,想必各位小伙伴都已经在Linux服务器或者虚拟机上已经实践并且都已经成功安装好了,那么今天宏哥就来介绍一下如何在Linux系统下运 ...
- Linux系统中的load average(平均负载/运行队列)
1.load average 的含义 系统负载(System Load)是系统CPU繁忙程度的度量,即有多少进程在等待被CPU调度(进程等待队列的长度) linux系统中的Load对当前CPU工作量的 ...
随机推荐
- 服务端性能测试技能tree
ALL: Left: Right: 摘抄一下(觉得不错) 以下来自百度百科 ---- 软件性能测试 软件性能测试是在交替进行负荷和强迫测试时常用的术语.理想的“软件性能测试”(和其他类型的测试)应在需 ...
- idea使用心得
简单的概括如下: IntelliJ系中的 Project 相当于Eclipse系中的 Workspace : IntelliJ系中的 Module 相当于Eclipse系中的 Project ...
- C++ 自增、自减运算符的重载和性能分析
01 ++.--运算符重载函数的格式 自增运算符和自减运算符是有前置和后置之分的,如: a++ // 后置自增运算符 ++a // 前置自增运算符 b-- // 后置自减运算符 --b // 前置自减 ...
- Vue笔记--通过自定义指令实现按钮操作权限
经常做中后台系统,此类系统的权限是比较重要,拿自己做过的一些项目做个笔记. Vue实现的中后台管理系统.按钮操作权限的空置一般都是通过自定义指令Vue.directive. <el-button ...
- 如何将HTML页面中的文本设置首行缩进
text-indent属性介绍 属性值单位 描述 em 比如:1em 就代表缩进1个字,2em缩进2个字...... 由于简单我就不过多的介绍了直接上代码了哦,注意:text-indent属性的值支持 ...
- xml解析-jaxp添加结点
jaxp添加结点 eg: //在第一个下面添加nv / 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * * 4.得到第一个p1 * -得到所有p1使用 ...
- 【XML】XML基本结构以及XML-Schema约束
XML 简介 1998年2月,W3C正式批准了可扩展标记语言的标准定义,可扩展标记语言可以对文档和数据进行结构化处理,从而能够在部门.客户和供应商之间进行交换,实现动态内容生成,企业集成和应用开发.可 ...
- haproxy动静分离的验证
线上出现过项目的静态文件被拦截,不能直接访问.所以想到了haproxy指向对应的url来访问静态文件,想到这里在网络搜索了下,确实有此功能.立即上测试环境验证下: 在listen中增加两行: #定 ...
- 3. 海思Hi3519A MPP从入门到精通(三 视频输入)
视频输入(VI)模块实现的功能:通过 MIPI Rx(含 MIPI 接口.LVDS 接口和 HISPI 接 口),SLVS-EC,BT.1120,BT.656,BT.601,DC 等接口接收视频数据. ...
- semantic功能介绍
semantic功能介绍 gnu Semantic Manual 1,代码自动补全 3,代码导航 启动semantic功能:(semantic-mode 1) 1,Semantic mode 是辅助模 ...