SDK FAQ
更新时间:
本文记录通过SDK收发消息时常见的问题。
开源客户端是否可以直接访问云上服务?
云消息队列 RabbitMQ 版完全兼容开源RabbitMQ。开源RabbitMQ可以直接访问云上服务。您需要通过云消息队列 RabbitMQ 版控制台生成静态用户名密码之后,通过静态账户直接访问云上服务。如何创建静态用户名密码,请参见静态用户名密码管理。
支持哪些语言的开源SDK?
开源RabbitMQ提供的多语言或框架SDK云消息队列 RabbitMQ 版全部都支持。具体信息,请参见开源RabbitMQ AMQP协议支持的多语言或框架SDK。
是否可以直接使用开源RabbitMQ JMS Client?
云消息队列 RabbitMQ 版不支持直接使用开源RabbitMQ JMS Client。您需要通过Maven配置依赖库才能接入云消息队列 RabbitMQ 版收发消息。如何通过Maven配置依赖库来收发消息,请参见JMS概述。
JMS标准有哪些接口不支持?
如果是自动ACK,是否支持通过Reject来触发消息重新入队列?
不可以。您可以使用basicReject方法否定应答单条消息,或者使用basicNack方法否定应答一条或多条消息,并使消息重入队列。
如何设置Message ID?
如果您需追踪和识别消息,可以在云消息队列 RabbitMQ 版的Producer客户端设置Message ID属性,为每条消息设置唯一标识符。
在云消息队列 RabbitMQ 版的Producer客户端设置Basic.Properties
的message-id
属性。示例代码如下:
Java
AMQP.BasicProperties props = new AMQP.BasicProperties.Builder().messageId("messageid").build();
channel.basicPublish("${ExchangeName}", "RoutingKey", true, props, ("消息发送Body").getBytes(StandardCharsets.UTF_8));
Python
properties = pika.BasicProperties(app_id='example-publisher', content_type='application/json', 'message_id'='messageid')
PHP
$msg = new AMQPMessage($msgBody, ['application_headers'=>$amqpTable,'content_type' => 'text/plain', 'delivery_mode' => 2,'message_id' => 'messageid',]);
Go
err = ch.Publish( "helloExchange", "hello", false, false, amqp.Publishing { ContentType: "text/plain", Body: []byte(body), MessageId: "messageId", })
Node.js
channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body);
如何删除队列消息?
您可以使用Java客户端库中queuePurge
方法删除某个队列的所有消息。示例代码如下:
channel.queuePurge("queue-name");
如何在开源客户端设置加密传输?
以下示例使用默认的非加密端口5672,如果使用加密传输,需要连接5671端口,并设置
com.rabbitmq.client.ConnectionFactory
的SslProtocol。
private void setSSL(com.rabbitmq.client.ConnectionFactory factory) throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init((KeyStore) null);
sslContext.init(null, trustManagerFactory.getTrustManagers(), null);
factory.useSslProtocol(sslContext);
}
文档内容是否对您有帮助?