RabbitMq项目应用的一些记录

在项目中使用到了RabbitMQ,简单的记录一下使用过程中的一些问题。

1、项目是一些医院之间Server进行文件的转发,医院转发关系在云端Server上维护,需求中有一个问题,医院的关系是可以变化的。所以RabbitMQ与Spring的整合就不能使用配置文件固定下来。这部分单独提取出来,在服务器启动的时候先请求云端Server,获取到转发关系,然后初始化MQ。

2、RabbitMQ的消息Exchange模式是direct模式,在文档中看到可以使用多重绑定,查了好久,最后在RabbitMQ的DEMO中找到了Direct模式使用多重绑定的例子。

每个医院使用自己的uuid创建订阅队列,然后将发送文件到本医院的其他医院uuid作为routekey,将队列、routekey绑定到Exchange中。医院发送消息时,将自己的uuid作为routekey发送到MQ,这样其他绑定此routekey的医院会收到消息。

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("45.56.82.102");
factory.setUsername("guest");
factory.setPassword("guest");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();

channel.exchangeDeclare(EXCHANGE_NAME, "direct",true);
String queueName = "Hello";
        
String[] argvs = new String[3];
argvs[0] = "info";
argvs[1] = "error";
argvs[2] = "warning";

channel.queueDeclare(queueName, true, false, false, null);
        
for(String severity : argvs){
   channel.queueBind(queueName, EXCHANGE_NAME, severity);
}

System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(queueName, true, consumer);

while (true) {
     QueueingConsumer.Delivery delivery = consumer.nextDelivery();
     String message = new String(delivery.getBody());
     String routingKey = delivery.getEnvelope().getRoutingKey();

     System.out.println(" [x] Received '" + routingKey + "':'" + message + "'");
}

猜你喜欢

转载自aa4892.iteye.com/blog/2219516