我有一个消息传递生成器(RabbitMQ),根据我必须发送的消息类型,我需要在运行时更改路由密钥和交换。
鉴于此,我实施了一个策略来加载具有特定属性的每个类,但它似乎不是一个好的解决方案。
例如:
public class MyProducerStrategy1 extends RabbitMessagingProducer {
private static final String ROUTING_KEY = "order1";
private static final String EXCHANGE = "myexchange1";
@Override
String getRoutingKey() {
return ROUTING_KEY;
}
@Override
String getExchange() {
return EXCHANGE;
}
@Override
public void sendMessage(Message message) {
super.sendMessage(message);
}
}
public class MyProducerStrategy2 extends RabbitMessagingProducer {
private static final String ROUTING_KEY = "fullfilment";
private static final String EXCHANGE = "myexchange2";
@Override
String getRoutingKey() {
return ROUTING_KEY;
}
@Override
String getExchange() {
return EXCHANGE;
}
@Override
public void sendMessage(Message message) {
super.sendMessage(message);
}
}
public abstract class RabbitMessagingProducer implements MessagingProducerStrategy {
@Autowired
private RabbitTemplate rabbitTemplate;
abstract String getRoutingKey();
abstract String getExchange();
@Override
public void sendMessage(Message message) {
rabbitTemplate.convertAndSend(getExchange(), getRoutingKey(), message);
}
}
有意义吗?或者还有另一种加载属性的方法,可能有一个类?
答案 0 :(得分:1)
不要为此方案创建多个类。
根据消息从属性文件加载文件。
另一种选择是创建一个静态值映射,其中消息类型作为键,路由键作为值。根据消息类型从地图中获取值。