急!急!请高手指点哈,发送一条短信,是否在两分钟内回复
有短信接口,平台在接收到短信回执和上行短信时,会主动的调用接口实现类的方法,现在遇到问题是: 当我发送一条短信出去,需要收信息人回复短信,如果在两分钟内回复,我就执行下一步,如果两分钟内没有回复,我需要在重新发送一条短信。我不知道怎么去实现如何判断是否在两分钟内回复短信,需要启线程吗?如何判断它是否在两分钟内回复,如果两分钟没有回复我执行下一步,如果两分钟没有回复我在发一次短信,如果两分钟过后,回复了,又进入另一步。请高手指点哈思路,如何去实施监控回复状态哦。谢谢了
public class ReceiveDemo extends ReceiveMsg{
/*获取下行短信返回状态和短信ID的方法*/
public void getAnswer(AnswerBean answerBean)
{
super.getAnswer(answerBean);
/*序列Id*/
String seqIdString = answerBean.getSeqId();
/*短信状态 ,0表示提交至API平台成功*/
int status = answerBean.getStatus();
/*下行短信ID,用来唯一标识一条下行短信*/
String msgId = answerBean.getMsgId();
//此处加入接收短信返回状态和短信ID的处理代码(即:将接收到的信息做入库处理)
}
/*接收上行短信的方法*/
public void getUpMsg(UpMsgBean upMsgBean) {
super.getUpMsg(upMsgBean);
String sequenceId = upMsgBean.getSequenceId();
/* 发送号码 */
String sendNum = upMsgBean.getSendNum();
/* 接收号码 */
String receiveNum = upMsgBean.getReceiveNum();
/* 上行短信到达时间 */
String msgRecTime = upMsgBean.getMsgRecTime();
/* 短信内容 */
String msgContent = upMsgBean.getMsgContent();
//此处加入接收上行短信的处理代码
}
}
------解决方案--------------------应该是由专职轮询程序来负责,如果每条短信的回复监控你都用一条线程来处理,那你线程要启动多少。。。
------解决方案--------------------这个需要用到 ,多线程,当然你也可以使用一个外加的小程序,不过我个人建议使用多线程,
我来谈谈两者的优缺点吧,
1、使用多线程:有点快捷方便,但是不利于二次开发;
2、使用外加程序,有利于二次开发;
你可以视情况而定。
------解决方案--------------------为什么要做成这种模式啊。
分两个模块,发送短信模块,接受短信模块
发送一条短信,记录一下相关信息就可以了。关闭线程。
接受短信模块线程,接受到一条短信,根据之前记录的信息处理就可以了。
------解决方案--------------------程序分成两部分(不是指模块或者函数,是指结构):
1、主程序:就是你主程序了,目前看来就是负责发送,很单纯,发送后就在数据库已发列表中写一行信息;
2、轮询程序:定期从数据库已发列表中查询所有状态为“已发送未回复”且“最后发送时间”>2分钟的信息,然后:
--再次发送该信息;
--更新最后发送时间,更新重发次数;
--重发次数如果太大了,是否状态修改为“非正常死亡”。
顺便说一句,2分钟是不是短了点?我觉得平时都够呛,有时候输入未必那么快,你赶上节假日啥的就更惨。而且自动重发显得很“爷有钱”,应该是按需重发似乎好点。
------解决方案--------------------根据7楼的提示 是不是还应该增加一个接收短信的线程?
如果接收一条短信,更新数据库的数据。
整个设计可以这样
1 发送短信程序 发送后就在数据库已发列表中写一行信息;需要发送短信的调用,不需要线程
2 接收短信程序 接收短信 处理业务 更新数据库的数据。
3、 轮询程序:定期从数据库已发列表中查询所有状态为“已发送未回复”且“最后发送时间”>2分钟的信息,然后:
------解决方案-------------------- 将你发送过的短信 新开一个线程,然后睡眠2分钟,将这个线程装到一个map里面,
如果2分钟之内返回了短信通过map将线程停止,没有就执行线程里面写好的 , 应该可以吧
------解决方案--------------------1.你在给客户发短信的时候就new一个线程出来,开启这个线程,这个线程需要睡眠2分钟,才执行代码,
执行完了就把map里面这线程去掉,或者有其他什么标识;
然后装到一个全局变量Map里面去。
2.当这个用户回复你这个短信的时候,你就去Map里找到这个线程,通过标识,或者什么判定这线程是否执行完,执行了就说明已经过了2分钟了,没执行,就停止执行就行了撒,具体的需要你自己的逻辑去控制