有多个rabbitConfig类 怎么区分?
时间: 2024-02-23 11:58:38 浏览: 15
当有多个 RabbitMQ 的配置类时,可以使用 `@Primary` 注解标记一个默认的配置类,或者在需要使用的地方指定使用哪个配置类。
如果你使用 `RabbitTemplate` 发送消息,可以在注入 `RabbitTemplate` 的地方指定使用哪个配置类。例如,假设你有两个配置类:`RabbitConfig1` 和 `RabbitConfig2`,并且你想要在某个服务中使用 `RabbitConfig2`,可以使用以下代码:
```java
@Service
public class MyService {
@Autowired
@Qualifier("rabbitTemplate2")
RabbitTemplate rabbitTemplate;
// ...
}
```
其中,`rabbitTemplate2` 是 `RabbitConfig2` 配置类中定义的 `RabbitTemplate` bean 的名称。在这里,我们使用 `@Qualifier` 注解指定使用哪个 `RabbitTemplate` bean。
如果你使用 `@RabbitListener` 注解监听消息,则可以在 `@RabbitListener` 注解中指定哪个配置类。例如:
```java
@RabbitListener(
bindings = @QueueBinding(
value = @Queue(value = "myQueue", durable = "true"),
exchange = @Exchange(value = "myExchange", type = ExchangeTypes.TOPIC),
key = "myKey"
),
containerFactory = "myContainerFactory"
)
public void handleMessage(String message) {
// ...
}
```
这里,`containerFactory` 属性指定使用哪个 `SimpleRabbitListenerContainerFactory` bean,而 `SimpleRabbitListenerContainerFactory` bean 是在配置类中定义的。如果你有多个配置类,可以在 `SimpleRabbitListenerContainerFactory` bean 上使用 `@Qualifier` 注解指定使用哪个配置类。例如:
```java
@Configuration
public class RabbitConfig1 {
@Bean(name = "myContainerFactory")
public SimpleRabbitListenerContainerFactory myContainerFactory() {
// ...
}
// ...
}
@Configuration
public class RabbitConfig2 {
@Bean(name = "myContainerFactory")
public SimpleRabbitListenerContainerFactory myContainerFactory() {
// ...
}
// ...
}
```
在这里,我们在 `myContainerFactory` bean 上使用 `@Qualifier` 注解标记不同的配置类。然后,在 `@RabbitListener` 注解中,我们可以使用 `containerFactory` 属性指定使用哪个 `SimpleRabbitListenerContainerFactory` bean。