以前使用的是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. Jquery绑定事件及动画效果

    Jquery绑定事件及动画效果 本文转载于:https://blog.csdn.net/Day_and_Night_2017/article/details/85799522 绑定事件 bind(ty ...

  2. uni-app学习(四)好用的插件2

    1. uni-app学习(四)好用的插件2 1.1. 树形结构 点击这里 1.2. 下拉刷新上拉加载组件 如果想把下拉上拉做成自定义的,更加好看,可以使用这个插件 地址这里 举个例子 1.3. 浮动键 ...

  3. Tasteless challenges medium WP

    http://chall.tasteless.eu/ 国外的一个靶场,都是单点知识,medium大部分还是比较简单 medium Level 1- Infiltration http://chall. ...

  4. nginx在centos下的安装

    第一步:打开浏览器下载,再上传到centOS系统中 http://nginx.org/download/ 或者在 centOS系统输入: wget http://nginx.org/download/ ...

  5. Mysql—主从复制

    https://www.jb51.net/article/137925.htm https://blog.51cto.com/13706760/2171361 https://www.cnblogs. ...

  6. Linux 设置MySQL开启自动启动

    1. 将服务文件拷贝到init.d下,并重命名为mysql cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld 2. 赋 ...

  7. C学习笔记(4)--- 指针的应用(第一部分)

    1.指针(pointer)概念: 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明.指针变量声明的一般形式为: ...

  8. JAVA反射(资源版)

    关于JAVA反射的作用可以看这篇博客(说的很详尽): https://www.cnblogs.com/jqyp/archive/2012/03/29/2423112.html 下面是关于JAVA反射的 ...

  9. 【转】gdb的调试与使用

    转载自:https://www.jianshu.com/p/7a06b0bda2d8 gdb的调试与使用 这篇应该是我见过的总结最详细的gdb调试指南了,这位博主是个很强的人,他的博客对萌新比较友好, ...

  10. LG5536 「XR-3」核心城市 树的直径

    问题描述 LG5536 题解 两次 \(\mathrm{dfs}\) 求树的直径. 然后找到树的直径的中点. 然后按照 子树中最深的点深度-自己深度 排序,贪心选取前 \(k\) 个. \(\math ...