以前使用的是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容器的更多相关文章

  1. 使用mybatis assembly插件打成tar包,在linux系统中运行服务

    使用mybatis assembly插件打成tar包,在linux系统中运行服务 assembly插件插件地址: 链接:https://pan.baidu.com/s/1i6bWPxF 密码:gad5 ...

  2. 『动善时』JMeter基础 — 57、Linux系统中运行JMeter脚本

    目录 1.Linux系统中安装Java环境 (1)解压Java安装包 (2)配置Java环境变量 (3)验证Java环境是否配置成功 2.Linux系统中安装JMeter (1)下载JMeter (2 ...

  3. 学习Linux系统中命令的简单方法

    如果说如何快速学习.了解Linux的话,我的答案是学命令.背命令!为何呢?对于一名新手来说,去学习Linux的思想.了解Linux的架构.明白Linux中“一切皆文件”概念虽然说是没有错,是对的.但是 ...

  4. Anbox —— 在 Linux 系统中运行 Android 应用

    具有以下特性: 没有限制:由于 Anbox 运行着整个 Android 系统,所以理论上任何应用都可以在其中运行 安全:Anbox 将 Android APP 放进一个密封的盒子中,无需直接访问硬件或 ...

  5. 能够在Linux系统中运行的5款大型耐玩游戏

    Linux 可能不会很快成为游戏玩家选择的平台 —— Valve Steam Machines 的失败似乎是对这一点的深刻提醒 —— 但这并不意味着该平台没有稳定增长,并且拥有相当多的优秀游戏. 从独 ...

  6. windows系统下的maven项目放到linux系统中运行时报org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnection这种异常的解决办法

    这个错误的解决办法其实很简单你把连接mysql数据库的那个jar包换成linux版本的就行了: linux版本的连接mysql数据库的jar包链接:http://files.cnblogs.com/f ...

  7. linux系统中运行node进程,无法杀死进程

    events.js:72 throw er; // Unhandled 'error' event ^Error: listen EADDRINUSE at errnoException (net.j ...

  8. Jmeter(五十四) - 从入门到精通高级篇 - 如何在linux系统下运行jmeter脚本 - 上篇(详解教程)

    1.简介 上一篇宏哥已经介绍了如何在Linux系统中安装Jmeter,想必各位小伙伴都已经在Linux服务器或者虚拟机上已经实践并且都已经成功安装好了,那么今天宏哥就来介绍一下如何在Linux系统下运 ...

  9. Linux系统中的load average(平均负载/运行队列)

    1.load average 的含义 系统负载(System Load)是系统CPU繁忙程度的度量,即有多少进程在等待被CPU调度(进程等待队列的长度) linux系统中的Load对当前CPU工作量的 ...

随机推荐

  1. python凯撒加密

    在密码学中,恺撒密码是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文.例,当偏移量是3的时候,所有的字母A将 ...

  2. arcgis api for javascript 学习(四) 地图的基本操作

    1.文章讲解的为地图的平移.放大.缩小.前视图.后视图以及全景视图的基本功能操作 2.主要用到的是arcgis api for javascript中Navigation的用法,代码如下: <! ...

  3. 用python的time库写一个进度条

    运算符 算数运算 如a=10,b=20 +两个数相加 a+b=30 -两个数相减 a-b=-10 两个数相乘 a****b =200 /两个数相除b/a=2 %取模,并返回余数b%a=0 幂,a*** ...

  4. 透过systemctl管理mysqld服务

    1. 背景 CentOS 7.x 之前的版本,系统启动时,第一支呼叫的程序是 init ,然后 init 去唤起所有的系统所需要的服务,无论是本地服务还是网络服务.所有的服务启动脚本都放置于 /etc ...

  5. markdown的语法

    目录 md格式是一个纯文本格式,对于一个程序员来说,用md格式代替word.txt等格式用来写说明文档或者blog,目前github以及CSDN都支持md格式书写blog了. md格式的语法: 无序列 ...

  6. Linux 的 netstat 命令

    转载 https://www.cnblogs.com/ct20150811/p/9432043.html 一般用  netstat -lnp |grep "程序名"

  7. 修改postgresql 密码

    sudo -u postgres psql -c "alter user postgres password '123456';"

  8. CodeForces - 1256C (思维+贪心)

    题意 https://vjudge.net/problem/CodeForces-1256C 有一条宽度为n的河.河的左岸编号为0,右岸编号为n+1.河流上还有m个木制平台,第i个平台的长度为ci(所 ...

  9. Jmeter通过正则表达式获取登录后token

    1.引用名称:即参数化,便于后面调用登录后获取的token 2.正则表达式:"token":"([0-9 a-z -]+?)" 3.模板:设置为 "$ ...

  10. CentOS7 通过 devstack 安装 OpenStack

    安装前的准备 修改源 (可跳过) 将下载源变更到国内可以时下载速度大大提升 打开下面的文件 vim /etc/yum.repos.d/CentOS-Base.repo 将原来的注释掉改成: [base ...