spring-amqp 不会使用 AmqpTemplate.convertAndSend() 插入消息
spring-amqp will not insert message using AmqpTemplate.convertAndSend()
这里是一个 Spring 小程序,预计会向 rabbitmq 队列中插入一条消息:
public class Main {
public static void main(String [] args) throws IOException {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(QueueConfiguration.class);
AmqpTemplate template = context.getBean(AmqpTemplate.class);
template.convertAndSend("asdflk ...");
context.destroy();
}
}
ApplicationContext如下:
@Configuration
public class QueueConfiguration {
@Bean
public ConnectionFactory connectionFactory() {
return new CachingConnectionFactory("192.168.1.39");
}
@Bean
public RabbitTemplate rabbitTemplate() {
return new RabbitTemplate(connectionFactory());
}
}
当我检查服务器上队列的内容时,没有插入任何内容。我还尝试在 RabbitTemplate 上设置交换名称或队列名称,但服务器上仍然没有任何显示。
应用程序的日志没有显示任何错误,但记录如下:
17:28:02.441 [main] DEBUG o.s.amqp.rabbit.core.RabbitTemplate - Executing callback on RabbitMQ Channel: Cached Rabbit Channel: AMQChannel(amqp://guest@192.168.1.39:5672/,1)
17:28:02.441 [main] DEBUG o.s.amqp.rabbit.core.RabbitTemplate - Publishing message on exchange [], routingKey = []
有什么问题吗?
我必须在调用 convertAndSend() 时将队列作为参数提供:
template.convertAndSend("hello2", "asdflk ...");
仍然想知道为什么 spring-amqp 不会抛出异常。有人知道没有队列的情况下消息投递到哪里吗?
我想我会按照 spring-amqp example 在 bean rabbitTemplate()
中保留路由键和队列名称。因为我目前正在使用多个队列,所以我对每个队列都有不同的 class,我在其中有这样的 rabbitTemplate:
@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(connectionFactory());
//The routing key = name of the queue in default exchange.
template.setRoutingKey("MyQueue");
// Queue name
template.setQueue("MyQueue");
return template;
}
您是否使用 tomcat 来部署它?如果是,那么这些可以在启动时加载,这将初始化所有 connection/channel/queues 等。
这里是一个 Spring 小程序,预计会向 rabbitmq 队列中插入一条消息:
public class Main {
public static void main(String [] args) throws IOException {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(QueueConfiguration.class);
AmqpTemplate template = context.getBean(AmqpTemplate.class);
template.convertAndSend("asdflk ...");
context.destroy();
}
}
ApplicationContext如下:
@Configuration
public class QueueConfiguration {
@Bean
public ConnectionFactory connectionFactory() {
return new CachingConnectionFactory("192.168.1.39");
}
@Bean
public RabbitTemplate rabbitTemplate() {
return new RabbitTemplate(connectionFactory());
}
}
当我检查服务器上队列的内容时,没有插入任何内容。我还尝试在 RabbitTemplate 上设置交换名称或队列名称,但服务器上仍然没有任何显示。
应用程序的日志没有显示任何错误,但记录如下:
17:28:02.441 [main] DEBUG o.s.amqp.rabbit.core.RabbitTemplate - Executing callback on RabbitMQ Channel: Cached Rabbit Channel: AMQChannel(amqp://guest@192.168.1.39:5672/,1)
17:28:02.441 [main] DEBUG o.s.amqp.rabbit.core.RabbitTemplate - Publishing message on exchange [], routingKey = []
有什么问题吗?
我必须在调用 convertAndSend() 时将队列作为参数提供:
template.convertAndSend("hello2", "asdflk ...");
仍然想知道为什么 spring-amqp 不会抛出异常。有人知道没有队列的情况下消息投递到哪里吗?
我想我会按照 spring-amqp example 在 bean rabbitTemplate()
中保留路由键和队列名称。因为我目前正在使用多个队列,所以我对每个队列都有不同的 class,我在其中有这样的 rabbitTemplate:
@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(connectionFactory());
//The routing key = name of the queue in default exchange.
template.setRoutingKey("MyQueue");
// Queue name
template.setQueue("MyQueue");
return template;
}
您是否使用 tomcat 来部署它?如果是,那么这些可以在启动时加载,这将初始化所有 connection/channel/queues 等。