首先使用原生代码形式进行消息的发送和接收(这里不介绍RabbitMq的安装部署启动)
见代码
public static void main(String[] args) {
// 创建一个CachingConnectionFactory 使用hostname作为构造参数
CachingConnectionFactory factory = new CachingConnectionFactory("127.0.0.1");
// 不设置的账号密码的话,会使用默认账号密码 guest
factory.setPassword("admin");
factory.setUsername("admin");
// 这里创建一个RabbitAdmin实例,RabbitMQ实现了可移植的AMQP管理操作,用于AMQP 0.9.1
RabbitAdmin rabbitAdmin = new RabbitAdmin(factory);
// 声明给定的队列,非持久化。
// 如果队列没有'name'属性值,则Broker将生成队列名称并从该方法返回。队列的declaredName属性将被更新以反映这个值。
// 这个方法的分析见 清单 1-1 RabbitMqAdmin#declareQueue
rabbitAdmin.declareQueue(new Queue("queue", false));
// 获取RabbitTemplate 简化同步RabbitMQ访问(发送和接收消息)的Helper类
RabbitTemplate rabbitTemplate = rabbitAdmin.getRabbitTemplate();
rabbitTemplate.convertAndSend("queue", "foooc");
String queue = (String) rabbitTemplate.receiveAndConvert("queue");
System.out.println("queue===="+queue);
}
清单 1-1 RabbitMqAdmin#declareQueue
声明给定的队列
public String declareQueue(final Queue queue) {
try {
// 这个rabbitTemplate是在创建RabbitAdmin的时候创建的
// 这个方法的执行涉及到许多方法重载,执行过程见图 UML 1-1
return this.rabbitTemplate.execute(channel -> {
DeclareOk[] declared = declareQueues(channel, queue);
return declared.length > 0 ? declared[0].getQueue() : null;
});
}
catch (AmqpException e) {
logOrRethrowDeclarationException(queue, "queue", e);
return null;
}
}
public RabbitAdmin(ConnectionFactory connectionFactory) {
Assert.notNull(connectionFactory, "ConnectionFactory must not be null");
this.connectionFactory = connectionFactory;
this.rabbitTemplate = new RabbitTemplate(connectionFactory);
}
。。。未完