Rabbitmq核心接口介绍

56 阅读2分钟

连接RabbitMQ

方式1:使用指定的参数

ConnectionFactory factory=new ConnectionFactory();
factory.setUsername(this.userName);
factory.setPassword(this.password);
factory.setVirtualHost(this.vhost);
factory.setHost(this.ip);
factory.setPort(this.port);
Connection connection=factory.newConnection();
Channel channel=conn.createChannel();

方式2:使用URI

factory.setUri(String.format("amqp://%s:%s@%s:%s/%s",this.userName,this.password,this.ip,this.port,this.vhost));
Connection conn=factory.newConnection();
Channel channel=conn.createChannel();

Connection可以创建多个Channel实例,但是这些实例不能在线程中共享,实战中每一个线程都开启一个单独的Channel。

交换器、队列的使用

交换器

exchangeDeclare定义交换器

完整的定义如下:

Exchange.DeclareOk exchangeDeclare(String exchange ,String type, boolean durable,boolean autoDelete , boolean internal ,Map<String,Object> arguments)
    throws IOException ;
  • exchange:交换器的名称
  • type:交换器类型(fanout、direct、topic等),可使用枚举BuiltinExchangeType
  • durable:是否持久化。true表示把交换器持久化,服务器重启时不会丢失
  • autoDelete:是否自动删除。true表示当与该交换器绑定的队列都解绑后,RabbitMQ自动删除该交换器
  • inernal:是否内置。true表示内置,客户端无法发消息到该交换器,只能通过其他交换器到该交换器
  • argument:其他参数

exchangeDelete删除交换器

// 通过交换器名称删除该交换器
Exchange . DeleteOk exchangeDelete(String exchange, boo1ean ifUnused)
    throws IOException;
  • exchange:交换器名称
  • ifUnused:true表示该交换器没有被使用的情况下才允许被删除,否则强制删除

队列

queueDeclare 定义队列

Queue.DeclareOk queueDeclare (String queue, boolean durable, boolean exclusive,boolean autoDelete, Map<String,Object> arguments)
    throws IOException;
  • queue:队列名称
  • durable:是否持久化。true表示队列会持久化,服务器重启时不会丢失
  • exclusive:是否排他。true表示首次声明队列的Connection(该连接下的多个信道都可以)可以访问该队列,并且其他Connection不能再创建同名排他队列,另外,无论是否持久化,客户端断开后都会被删除。
  • autoDelete:是否自动删除。参照 exchangeDeclare中的介绍
  • arguments:其他参数

queueDelete删除队列

Queue.De1eteOk queueDelete(String queue, boo1ean ifUnused, boolean ifEmpty )
throws IOException;
  • queue:队列名称
  • ifUnused:true表示只有该队列没有被使用的情况下才允许删除,否则强制删除
  • ifEmpty:true表示队列为空才允许删除,否则强制删除

queuepurge清空队列

Queue.PurgeOk queuePurge(String queue ) throws IOException;

queueBind交换器和队列绑定

Queue.BindOk queueBind(String queue , String exchange , String routingKey,Map<String, Object> arguments)
    throws IOException;

  • queue:队列名称
  • exchange:交换器名称
  • routingKey:用来绑定队列和交换器的路由键
  • arguments:其他参数

exchangeBind交换器和交换器绑定

Exchange.BindOk exchangeBind(String destination, String source, String routingKey, Map<String, Object> arguments) throws IOException ;

因为rabbitmq的消息存储在队列中,所以交换器等几乎不占用资源,考虑队列占用资源就可以。 虽然按照官网建议消费者和生产者都应该尝试创建队列,但建议在使用前,根据业务实际情况,提前预置队列,规划好资源。