linux下如何通过rabbitmq进行简单的电脑间通信
2017-08-01 00:41
706 查看
SimpleAmqpClient中channel的构造函数是这样的:
当我们成功地在一台电脑上实现了两个终端之间的信息传递后, 很自然的想到, 能不能 就像python socket一样通过改一下host地址进行两台电脑间的信息传递呢? 很遗憾, 没有这么简单, 尝试过后你会看到如 socket error occurred 的报错. 这是因为用户guest并不允许localhost以外的host.
为了解决这个问题, 我们需要做两件事:
1. 创建一个用户
2. 为用户提供访问vhost的权利
创建用户
为用户提供访问vhost的权利
这样一来就可进行电脑间的信息通信啦! 一下为简单例子
send.cpp
recv.cpp
在一台电脑运行recv.cpp, 在另一台电脑运行send.cpp, 就可以在第一台电脑看到hello啦!
这样就实现了简单的电脑间通信!
编译命令还要加 -lSimpleAmqpClient参数
static ptr_t AmqpClient::Channel::Create(const std::string & host = "127.0.0.1", int port = 5672, const std::string & username = "guest", const std::string & password = "guest", const std::string & vhost = "/", int frame_max = 131072 )
当我们成功地在一台电脑上实现了两个终端之间的信息传递后, 很自然的想到, 能不能 就像python socket一样通过改一下host地址进行两台电脑间的信息传递呢? 很遗憾, 没有这么简单, 尝试过后你会看到如 socket error occurred 的报错. 这是因为用户guest并不允许localhost以外的host.
为了解决这个问题, 我们需要做两件事:
1. 创建一个用户
2. 为用户提供访问vhost的权利
创建用户
rabbitmqctl add_user [username] [password] 如: rabbitmqctl add_user hello 123456
为用户提供访问vhost的权利
rabbitmqctl set_permissions -p / [username] ".*" ".*" ".*" 如: rabbitmqctl set_permissions -p / hello ".*" ".*" ".*"
这样一来就可进行电脑间的信息通信啦! 一下为简单例子
send.cpp
#include <SimpleAmqpClient/SimpleAmqpClient.h> #include <iostream> #include <string> using namespace std; int main() { string queue = "hello"; AmqpClient::Channel::ptr_t channel = AmqpClient::Channel::Create("192.168.199.229", 5672, "hello", "123456"); //host即为跑recv.cpp代码的电脑的ip地址 // 在linux下可通过指令ifconfig查看 channel->DeclareQueue(queue, false, true, false, false); string str = "hello!"; channel->BasicPublish("", queue, AmqpClient::BasicMessage::Create(str)); cout << "sent hello"; }
recv.cpp
#include <SimpleAmqpClient/SimpleAmqpClient.h> #include <iostream> #include <string> using namespace std; int main() { while(1) { string queue = "hello"; AmqpClient::Channel::ptr_t channel = AmqpClient::Channel::Create("192.168.199.229", 5672, "hello", "123456"); channel->DeclareQueue(queue, false, true, false, false); AmqpClient::Envelope::ptr_t envelope; channel->BasicConsume(queue, "", true, true, false); bool success = channel->BasicConsumeMessage(envelope, -1); string buffer = envelope->Message()->Body(); cout << buffer << endl; } }
在一台电脑运行recv.cpp, 在另一台电脑运行send.cpp, 就可以在第一台电脑看到hello啦!
这样就实现了简单的电脑间通信!
编译命令还要加 -lSimpleAmqpClient参数
相关文章推荐
- c++builder上使用TIDTCPServer和TIDTCPClient进行简单通信,如何通过代码动态设置TIDTCPServer的Bindings属性。
- linux两个程序通过共享内存通信的一个简单例子
- linux 下进程间通过信号进行通信的具体实现过程
- linux下java程序与C语言程序通过SOCKET通信的简单例子
- Linux下两个程序进行socket通信的简单例子
- Linux下两个程序进行socket通信的简单例子
- WCF后续之旅(1): WCF是如何通过Binding进行通信的
- 如何使用TCP/IP与服务器进行通信-一个简单的聊天程序
- 通过通过xmanager的passive进行连接连接linux的简单设置
- WCF之旅读书笔记(2):WCF如何通过Binding进行通信
- 【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信
- 如何在浏览器中简单模拟微信浏览器(仅限于通过User Agent进行判断的页面)
- linux进程间通过管道通信实现简单的tftp
- 如何使用TCP/IP与服务器进行通信-一个简单的聊天程序
- 利用VB.Net 通过Windows Sockets (Winsock)以及多线程编程进行桌面电脑与Pocket PC间的双向通信
- linux两个程序通过共享内存通信的一个简单例子
- 如何通过Xcode 5中集成的XCTest框架进行简单的单元测试
- winfrom如何通过http来进行通信,并且通过传递json格式的数据可接受json格式的数据
- linux下java程序与C语言程序通过SOCKET通信的简单例子
- Linux的内核空间和用户空间通过内存共享来进行通信的实现