zoukankan      html  css  js  c++  java
  • RabbitMQ知识点整理10-发送消息

    如果要发送一个消息,可以使用Channel 类的basicPublish 方法,比如发送一条内容为"Hello World! "的消息,参考如下:

    byte[] messageBodyBytes = "Hello,world! ". getBytes();
    channel.basicPublish(exchangeName , routingKey , null , messageBodyBytes);

    为了更好地控制发送,可以使用mandatory 这个参数, 或者可以发送一些特定属性的信息:

    channel.basicPub1ish(exchangeName, routingngKey, mandatory, MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes) ;

    上面这行代码发送了一条消息,这条消息的投递模式( delivery mode ) 设直为2 ,即消息会被持久化(即存入磁盘)在服务器中。同时这条消息的优先级( priority )设置为1 , content-type为" text/plain" 。可以自己设定消息的属性:

    channe1.basicPub1ish(exchangeName, routingKey ,
    new AMQP.BasicProperties.Builder()
    .contentType("text/plain")
    .deliveryMode(2)
    .priority(1)
    .userId("hidden")
    .build()), messageBodyBytes) ;

    也可以发送一条带有headers 的消息:

    Map<String, Object> headers = new HashMap<>() ;
    headers.put("loca1tion", "here");
    headers.put("time", "today");
    channe1.basicPublish(exchangeName,routingKey ,
    new AMQP.BasicProperties.Builder()
    .headers(headers)
    .build()) ,
    messageBodyBytes) ;

    还可以发送一条带有过期时间(expiration ) 的消息:

    channe1 . basicPub1ish(exchangeName, routingKey,
    new AMQP.BasicProperties.Bui1der()
    .expiration("60000")
    .build()) ,
    messageBodyBytes);

    以上只是举例,由于篇幅关系,这里就不一一列举所有的可能情形了。对于basicPublish而言,有几个重载方法:

    1.void basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body) throws IOException;
    2.void basicPublish(String exchange, String routingKey, boolean mandatory, BasicProperties props, byte[] body)
                throws IOException;
    3.void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body)
                throws IOException;

    对应的具体参数解释如下所述:

    exchange: 交换器的名称, 指明消息需要发送到哪个交换器中。如果设置为空字符串,则消息会被发送到RabbitMQ 默认的交换器中。

    routingKey: 路由键,交换器根据路由键将消息存储到相应的队列之中。

    props: 消息的基本属性集, 其包含14 个属性成员,分别有contentType 、contentEncoding 、headers ( Map<String , Object>) 、deliveryMode 、priority 、correlationId 、replyTo 、expiration 、messageld、timestamp 、type 、userld 、appld、clusterld。其中常用的几种都在上面的示例中进行了演示。

    body: 消息体( payload ) ,真正需要发送的消息。

    mandatory 和 immediate 的详细内容会在后面说到

  • 相关阅读:
    06. 如何去掉数组中的重复性数据
    01. 作用域和值类型引用类型的传递
    韩昊 20190919-5 代码规范,结对
    韩昊 20190919-6 四则运算试题生成,结对
    韩昊 20190919-2 功能测试
    韩昊20190912-1 每周例行报告
    将py文件打包为exe文件方法
    关于四个定义的理解
    韩昊 20190912-2 命令行
    韩昊 20190905-1 每周例行报告
  • 原文地址:https://www.cnblogs.com/no-celery/p/13808257.html
Copyright © 2011-2022 走看看