windows下rabbitmq-c编译(带openssl无需MinGW)

Posted 太白的技术博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows下rabbitmq-c编译(带openssl无需MinGW)相关的知识,希望对你有一定的参考价值。

因为项目原因,需要使用到rabbitmq的c客户端库。首先,参见上一篇windows下openssl编译,如果已经使用cmake编译过了,则先delete cache(File-Delete Cache),否则原来的cmake缓存都在了,将仍然会出现原来的错误。

依次点击configire、generate,可以生成vs sln。如下:

最后使用VS即可生成rabbitmq.4.dll,如下:

测试自带的例子:

D:\\RabbitMQ Server\\rabbitmq_server-3.6.5\\sbin>cd /d D:\\rabbitmq-c-0.8.0-build\\examples\\Debug

D:\\rabbitmq-c-0.8.0-build\\examples\\Debug>amqp_listen localhost 5672 amq.direct test
Delivery 1, exchange amq.direct routingkey test
Content-type: text/plain
----
00000000: 68 65 6C 6C 6F 20 77 6F : 72 6C 64                 hello world
0000000B:
Delivery 2, exchange amq.direct routingkey test
Content-type: text/plain
----
00000000: 68 65 6C 6C 6F 20 77 6F : 72 6C 64                 hello world
0000000B:
Delivery 3, exchange amq.direct routingkey test
Content-type: text/plain
----
00000000: 68 65 6C 6C 6F 20 77 6F : 72 6C 64                 hello world
0000000B:
Delivery 4, exchange amq.direct routingkey test

新开一个窗口,执行如下:

D:\\RabbitMQ Server\\rabbitmq_server-3.6.5\\sbin>cd /d D:\\rabbitmq-c-0.8.0-build\\examples\\Debug

D:\\rabbitmq-c-0.8.0-build\\examples\\Debug>amqp_sendstring localhost 5672 amq.direct test "hello world"

D:\\rabbitmq-c-0.8.0-build\\examples\\Debug>amqp_sendstring localhost 5672 amq.direct test "hello world"

D:\\rabbitmq-c-0.8.0-build\\examples\\Debug>amqp_sendstring localhost 5672 amq.direct test "hello world"

D:\\rabbitmq-c-0.8.0-build\\examples\\Debug>amqp_sendstring localhost 5672 amq.direct test "hello world"

D:\\rabbitmq-c-0.8.0-build\\examples\\Debug>amqp_sendstring localhost 5672 amq.direct test "hello world"

D:\\rabbitmq-c-0.8.0-build\\examples\\Debug>amqp_sendstring localhost 5672 amq.direct test "hello world"

D:\\rabbitmq-c-0.8.0-build\\examples\\Debug>amqp_sendstring localhost 5672 amq.direct test "hello world"

需要注意的是,librabbitmq的channel不是线程安全的,因此需要应用自行保证线程安全性,如下所述:

Threading

You cannot share a socket, an amqp_connection_state_t, or a channel between threads using librabbitmq. The librabbitmqlibrary is built with event-driven, single-threaded applications in mind, and does not yet cater to any of the requirements of pthreaded applications.

Your applications instead should open an AMQP connection (and an associated socket, of course) per thread. If your program needs to access an AMQP connection or any of its channels from more than one thread, it is entirely responsible for designing and implementing an appropriate locking scheme. It will generally be much simpler to have a connection exclusive to each thread that needs AMQP service.

官方主页https://github.com/alanxz/rabbitmq-c

 doc api http://alanxz.github.io/rabbitmq-c/docs/0.8.0/classes.html

剩下的就是慢慢啃主要的api了。

以上是关于windows下rabbitmq-c编译(带openssl无需MinGW)的主要内容,如果未能解决你的问题,请参考以下文章

Linux下RabbitMQ的编译,生成动态库和静态库

RabbitMQ第一课 C AMQP client library

Windows 下Cmake 编译libtins(带boost库)

php的rabbitmq扩展(未测试)

window下C#(winform)调用带界面的Qt库文件(DLL)

window下C#(winform)调用带界面的Qt库文件(DLL)