使用适配器模式重构消息服务器代码

使用适配器模式重构消息服务器代码

需求

在平时生产开发中,很多场景目前都会用到发送邮件,短信等一系列的推送消息的功能,往往我们需要搭建一个消息服务器,用于异步处理这些需求。接下来简单总结一下定义消息处理接口

1.定义一个适配器接口,提供发送消息的方法
public interface MessageAdapter {
	//接受消息,json为发送消息的类型及内容
    public void distribute(JSONObject jsonObject);
}
2.创建一个类,用于监听消息队列生成的消息
@Slf4j
@Component
public class ConsumerDistribute {
	@Autowired
	private SMSMailboxService smsMailboxService;

	@JmsListener(destination = "mail_queue")
	public void distribute(String json) {
		log.info("###消息服务###收到消息,消息内容 json:{}", json);
		if (StringUtils.isEmpty(json)) {
			return;
		}
		JSONObject jsonObject = new JSONObject().parseObject(json);
		JSONObject header = jsonObject.getJSONObject("header");
		String interfaceType = header.getString("smsType");
		MessageAdapter messageAdapter = null;
		//通过判断报文中的类型,选择调用实现类
		switch (smsType) {
		// 发送邮件
		case MQInterfaceType.SMS_MAIL:
		//适配实现类
			messageAdapter=smsMailboxService;
			break;

		default:
			break;
		}
		JSONObject content=jsonObject.getJSONObject("content");
		messageAdapter.distribute(content);

	}

}
3.具体的实现功能的方法

//实现了适配器类的方法,适配器可以理解为一个接口,那么我们现在要实现这个接口里面的方法,在步骤2,当获取消息队列的报文时,已经通过smsType将类型装转换成了SMSMailboxService,所以实现类会走这个方法,同样到,如果报文中smsType为发送短信的,那么调用的就是 SMSMessageService
@Slf4j
@Service
public class SMSMailboxService  implements MessageAdapter {
	@Autowired
	private JavaMailSender mailSender; // 自动注入的Bean

	@Override
	public void distribute(JSONObject jsonObject) {
		String mail=jsonObject.getString("mail");
		String userName=jsonObject.getString("userName");
		log.info("###消费者收到消息... mail:{},userName:{}",mail,userName);
		// 发送邮件
		// 开始发送邮件
		SimpleMailMessage message = new SimpleMailMessage();
		message.setFrom(mail);
		message.setTo(mail); // 自己给自己发送邮件
		message.setSubject("哈哈,就是这么简单");
		message.setText("适配器模式重构消息服务");
		log.info("###发送短信邮箱 mail:{}", mail);
		mailSender.send(message);

	}

}

总结一下: 其实就是我们有多个功能类似的业务,咱们可以定义一个接口,里面的方法是每个功能都需要用到的,然后不同的Service就集成这个接口,就会有不同的实现方案,在我们选择调用的时候,通过判断类型,决定调用哪个具体的实现类。

参考报文

{
    "header": {
        "interfaceType": "接口类型"
    },
    "content": {}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值