我有一个消息生产者(RabbitMQ),根据我必须发送的消息类型,我需要更改路由 key 并在运行时进行交换。
鉴于此,我实现了一种策略来加载具有特定属性的每个类,但这似乎不是一个好的解决方案。
例如:
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);
}
}
有道理吗?或者还有另一种方法来加载属性并可能有一个类?
最佳答案
不要为此场景创建多个类。
根据消息从属性文件加载文件。
另一个选项是创建一个静态值映射,其中消息类型作为键,路由键作为值。根据消息类型从 map 中获取值。
关于java - 存储类属性并在运行时加载的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48172498/