大家好,我是
方圆
1. 业务背景和解决方案
对应的是,单生产者,单消费者
2. 重要步骤
生产者发送消息时抛出异常的解决
消费者存数据库时抛出异常解决
同样,将消费者代码用try catch块儿包起来,也可以避免消息消费失败而一直抛出异常(只有消费者向rabbitmq发送ack时才会将消息移除队列,如果我们用try catch,就能被认定为消息被消费了)
3. 传递消息时,采用的Json方案和序列化方案
byte[] message = SerializationUtils.serialize(dnaVoteMessage);
DNAVoteMessage message = (DNAVoteMessage) SerializationUtils.deserialize(dnaVoteMessage);
需要注意的是,对应需要序列化的类要实现Serializable接口,并指定serialVersionUID
使用Json方案需要自己写一个转化Json的工具类
String sendMessage = JsonUtils.obj2json(message);
DNAStarMessage message = JsonUtils.json2pojo(dnaStarMessage, DNAStarMessage.class);
public static String obj2json(Object obj) {
ObjectMapper objectMapper = new ObjectMapper();
String result = null;
try {
result = objectMapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
logger.error("[obj2json] error:", e);
}
return result;
}
public static <T> T json2pojo(String jsonStr, Class<T> clazz) {
ObjectMapper objectMapper = new ObjectMapper();
T result = null;
try {
if (clazz.newInstance() instanceof String) {
result = (T) jsonStr;
} else {
result = objectMapper.readValue(jsonStr, clazz);
}
} catch (Exception e) {
logger.error("[json2pojo] error:", e);
}
return result;
}
4. 限制每月固定数量的明星
对应的模型是多生产者(多个管理员),单消费者
加油儿