bear-zyy

RMQClient iOS的集成和使用

RMQClient iOS的集成和使用

一、介绍

QoS(Quality of Service,服务质量)

logo

RETAIN(保持)

1:表示发送的消息需要一直持久保存(不受服务器重启影响),不但要发送给当前的订阅者,并且以后新来的订阅了此Topic name的订阅者会马上得到推送。
备注:新来乍到的订阅者,只会取出最新的一个RETAIN flag = 1的消息推送。
0:仅仅为当前订阅者推送此消息。
假如服务器收到一个空消息体(zero-length payload)、RETAIN = 1、已存在Topic name的PUBLISH消息,服务器可以删除掉对应的已被持久化的PUBLISH消息。

心跳

1、客户端会在一个心跳周期内发送一条pingreq消息到服务器。

2、心跳平率在connect可变头部“keep alive timer”中定义时间,单位为秒。

3、服务器收到pingreq请求后,会立即响应一个两个字节固定格式的pingresp消息。

4、服务器一般在1.5倍的心跳周期内接收不到客服端发送的pingreq,可考虑关闭客服端的连接描述,但对客服端的订阅不会产生影响。

5、若客服端发送pingreq之后的一个心跳周期内接收不到pingresp消息,可考虑关闭TCP/IP套接字连接

二、集成

1、用cocopods

pod ‘RMQClient’


2、用Carthage

github “rabbitmq/rabbitmq-objc-client” ~> 0.10.0


3、也可以直接添加RMQClienk框架,这里自己去找框架了


操作完成后,目录是这个样子的

logo

三、集成

1、导入头文件

import “RMQClient.h”

注意:如果是用Carthage导入的话,导入头文件

import < RMQClient/RMQClient.h >

2、连接RabbitMQ服务器

1
2
3
4
self.connection = [[RMQConnection alloc] initWithUri:self.uri delegate:[RMQConnectionDelegateLogger new]];//初始化一个连接
[self.connection start];

3、创建一个通道

1
2
3
4
5
6
7
8
9
10
id<RMQChannel> ch = [self.connection createChannel];
self.channel = ch;
RMQExchange * ex = [[RMQExchange alloc] initWithName:@"amq.topic" type:@"topic" options:RMQExchangeDeclareDurable channel:ch];
/*
exchange有四种type,分别是topic direct , headers,fanout
*/
self.exchange = ex;
self.queue = [ch queue:@"" options:RMQQueueDeclareDurable];
[self.queue bind:ex routingKey:@"你的项目topic"];//订阅的主题名字

4、接收消息

1
2
3
4
5
6
7
8
9
[self.queue subscribe:^(RMQMessage * _Nonnull message)
NSLog(@"====%@",message);
NSString * string = [[NSString alloc] initWithData:message.body encoding:NSUTF8StringEncoding];
NSData * jsonData = [string dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@",dict);
}];

5、发送消息

1
2
[self.exchange publish:[@"hello world" dataUsingEncoding:NSUTF8StringEncoding] routingKey:@"robot.1000896.status@sub"];

参考资料:http://www.rabbitmq.com/tutorials/tutorial-one-objectivec.html

⬅️ Go back