我最近开始学习Spring和spring-amqp,所以这个问题可能看起来很基本,所以请原谅我。
ApplicationContext context = new AnnotationConfigApplicationContext(MyQueueConfiguration.class);
AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);
amqpTemplate.convertAndSend("Hello World!!");
ApplicationContext context = new AnnotationConfigApplicationContext(HelloWorldConfiguration.class);
或者有一种方法可以Spring加载所有我的队列配置类,然后只使用如下所示的对象:
// calling code when I get a POST request
MyQueueConfigurationClass.publishMessage(payload, queueName);
// The implementation code
public boolean publishMessage(String payload, String queueName){
// Get Bean for the **queueName** somehow
AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);
// Use the bean to send the message
amqpTemplate.convertAndSend(payload);
}
新的AnnotationConfigApplicationContext()
每次的情况下获取确切队列的amqpTemplate呢?您不应该每次都创建一个新的上下文;那是非常浪费的。
您可以将多个连接工厂(每个rabbit主机一个)添加到根(或web)上下文中,然后将路由连接工厂与SendConnectionFactorySelectoreXPression
一起使用,根据发送的消息选择合适的主机。
或者,您可以简单地为每个服务器连接不同的rabbittemplate
。
try {
SimpleResourceHolder.bind(routingCF, keyForThisMessage);
rabbitTemplate.convertAndSend(message);
}
finally {
SimpleResourceHolder.unbind(routingCF);
}
<rabbit:template id="routingTemplate"
connection-factory="rcf"
send-connection-factory-selector-expression="messageProperties.headers['cfKey']" />
<bean id="rcf" class="org.springframework.amqp.rabbit.connection.SimpleRoutingConnectionFactory">
<property name="targetConnectionFactories">
<map>
<entry key="foo" value-ref="cf1"/>
<entry key="bar" value-ref="cf2"/>
</map>
</property>
<property name="defaultTargetConnectionFactory" ref="defaultCF"/>
</bean>
...然后...
this.routingTemplate.convertAndSend("exchange", "routingKey", "xyz", new MessagePostProcessor() {
@Override
public Message postProcessMessage(Message message) throws AmqpException {
message.getMessageProperties().setHeader("cfKey", "foo");
return message;
}
});
这里有一个完整的测试用例。
在我们的应用程序中,我们使用RabbitMQ和spring-amqp(1.4.3.发行版)。我们那里排了两个队。它们都配置了TTL(60000和100000)。当我们启动应用程序时,它会给出以下错误: [pool-4-thread-1]错误org.springFramework.amqp.rabbit.connection.cachingConnectionFactory-通道关闭:通道错误;协议
我有一个Spring Boot应用程序,希望从多个AWS SQS队列接收消息。这些队列都有自己的凭据(遗憾的是,我对此无能为力)。这些凭据都不能访问其他队列之一,它们都仅限于一个队列。 因为只有一个队列和凭证,所以很简单。我只需要提供作为AWSCredentialsProvider的凭据,并用启用SQS注释我的方法 但我不知道如何使用多个凭据来执行此操作。 SqsListener注释无法提供凭据、
我刚刚开始使用RabbitMQ和AMQP。 我有一个消息队列 我有多个消费者,我想用相同的消息做不同的事情。 RabbitMQ的大部分文档似乎都集中在循环(round-robin)上,即单个消息由单个消费者使用,负载在每个消费者之间分散。这的确是我目击的行为。 例如:生产者只有一个队列,每2秒发送一次消息: 这里有一个消费者: 如果我启动消费者两次,我可以看到每个消费者都在以循环行为消费交替消息。
问题内容: 我一般只是开始使用RabbitMQ和AMQP。 我有一条消息队列 我有多个消费者,我想用 同一条消息 做不同的事情。 RabbitMQ的大多数文档似乎都集中在循环上,即单个消息由单个使用者使用,而负载则分散在每个使用者之间。我确实是这种行为。 例如:生产者只有一个队列,每2秒发送一次消息: 这是一个消费者: 如果我启动使用者两次,则 可以看到每个使用者都以循环方式使用替代消息。 例如,
所以我的问题是,当我用profile只运行applicaiton时,Spring是否合并了这两个profile,并且我可以在应用程序中看到和?
我使用SpringBoot,有两个非常相似的服务,我想在。 配置大致如下所示: 是否可以创建一个带有注释的类,并在注入点设置前缀? 例如。 然后在服务本身: 不幸的是,我还没有在留档中找到关于这样一个功能的东西...非常感谢您的帮助!