RabbitMQ 流程和重要接口参数

 

基本流程:

消息生产者

创建连接连接到MabbitMQ

1,创建连接工厂

ConnectionFactory factory = new ConnectionFactory();

2,设置MabbitMQ所在主机ip或者主机名

factory.setHost("localhost");

3,创建一个连接

Connection connection = factory.newConnection();

4,创建通道

Channel channel = connection.createChannel();

5,声明队列

channel.queueDeclare(QUEUE_NAME, false, false, false, null)

6,发布消息

String message = "hello world!";

channel.basicPublish("", QUEUE_NAME, null, message.getBytes());

7,关闭通道和连接

channel.close();

connection.close();

 

消息消费者

1,打开连接和创建频道,与发送端一样

ConnectionFactory factory = new ConnectionFactory();

factory.setHost("localhost");

Connection connection = factory.newConnection();

Channel channel = connection.createChannel();

2,声明队列,主要为了防止消息接收者先运行此程序,队列还不存在时创建队列

channel.queueDeclare(QUEUE_NAME, false, false, false, null);

3,创建队列消费者

QueueingConsumer consumer = new QueueingConsumer(channel);

4,指定消费队列

channel.basicConsume(QUEUE_NAME, true, consumer);

5,接收消息

while (true){

    //nextDelivery是一个阻塞方法(内部实现其实是阻塞队列的take方法)

    QueueingConsumer.Delivery delivery = consumer.nextDelivery();

    String message = new String(delivery.getBody());

}

 

部分接口

1其中声明队列的方法

channel.queueDeclare(QUEUE_NAME, false, false, false, null); 

参数分别代表  队列名是否持久化独占的queue不使用时是否自动删除其他参数

 

2发布消息

channel.basicPublish(exchangeName, routingKey, MessageProperties, message.getBytes());

第一个参数转发器默认为" "

第二个参数为关键词,这里是指定队列名

第三个是设置消息的一些属性,可以为null

第四个是设置消息

 

3消费消息

channel.basicConsume(String queuename, boolean autoAck, Consumer consumer)

autoAck 代表自动应答,默认true开启,手动应答为false

 

4声明转发器

channel.exchangeDeclare("logs","fanout");

转发器类型有

  • direct  直接转发 消息会被推送至绑定键(binding key)和消息发布附带的选择键(routing key)完全匹配的队列
  • topic  主题转发 必须是由点隔开的一系列的标识符组成。标识符可以是任何东西,但是一般都与消息的某些特性相关。一些合法的选择键的例子:"stock.usd.nyse", "nyse.vmw","quick.orange.rabbit".你可以定义任何数量的标识符,上限为255个字节   *可以匹配一个标识符,        #可以匹配0个或多个标识符。
  • headers
  • fanout   把所有接收到的消息,广播到所有它所知道的队列

 

5临时队列

Java中我们可以使用queueDeclare()方法,不传递任何参数,来创建一个非持久的、唯一的、自动删除的队列且队列名称由服务器随机产生。


String queueName = channel.queueDeclare().getQueue();

 

6绑定

channel.queueBind(queueName, EXCHANGE_NAME, binding key);

其中bindingKey对应发布消息中的routingKey

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值