Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中创建消息查询处理方法?_Java_Spring_Methods_Sms - Fatal编程技术网

如何在java中创建消息查询处理方法?

如何在java中创建消息查询处理方法?,java,spring,methods,sms,Java,Spring,Methods,Sms,我正在处理一个消息查询处理程序,因此,我需要为每个情况/状态声明一些方法:途中(如果尚未发送,则执行重试)、传递(从队列/列表中删除,以便停止发送)、过期和无法传递,具体取决于200ok响应。我已经有了过期和不可交付的方法(将积分返回给用户),但是我找不到合适的“途中”和“交付”方法,因为对于“途中”,我需要有参数,以便每Y秒重试一次(在单独的类上)(可能在application.properties中)我还想知道我是否可以在smsreader类上管理它,但我不确定(我会在最后留下示例代码)。你

我正在处理一个消息查询处理程序,因此,我需要为每个情况/状态声明一些方法:途中(如果尚未发送,则执行重试)、传递(从队列/列表中删除,以便停止发送)、过期和无法传递,具体取决于200ok响应。我已经有了过期和不可交付的方法(将积分返回给用户),但是我找不到合适的“途中”和“交付”方法,因为对于“途中”,我需要有参数,以便每Y秒重试一次(在单独的类上)(可能在application.properties中)我还想知道我是否可以在smsreader类上管理它,但我不确定(我会在最后留下示例代码)。你知道怎么做吗?这是我正在实际处理的代码

QUERY HANDLER CLASS

@Component
public class MsgQueryApiHandler {

    private static final Logger logger = LoggerFactory.getLogger(MsgQueryApiHandler.class);

    RestTemplate restTemplate = new RestTemplate();

    @Value("${smscMsgQuery.host}")
    private String smscMsgQueryHost;

    @Value("${smscMsgQuery.user}")
    private String smscMsgQueryUser;

    @Value("${smscMsgQuery.pass}")
    private String smscMsgQueryPass;

    @Autowired
    public ConfirmHttp confirmHttp;

 public void msgQueryHandle(SmsRequest smsRequest){
        String response = getMessageStatus(Integer.parseInt(smsRequest.getMessageId()));
        switch (response){
            //Perform Retries
            case"ENROUTE":
                break;

            //remove of the queue
            case"DELIVERED":

                break;

            case"EXPIRED":
            case"UNDELIVERABLE":
                refundMsg(smsRequest);
                break;
        }
    }

private void refundMsg (SmsRequest smsRequest){
        ChargeHttpRequest reqBody = new ChargeHttpRequest();
        reqBody.setOrigSystemId(smsRequest.getOrigSystemId());
        reqBody.setStatus("failed");
        Integer statusCode = confirmHttp.sendCDR(reqBody);
        logger.info("Status code from api {}", statusCode);
    }

    public String getMessageStatus(int messageId) {
        String status = "";
        try {
            UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(smscMsgQueryHost)
                    .queryParam("userid", smscMsgQueryUser)
                    .queryParam("password", smscMsgQueryPass)
                    .queryParam("msgid", messageId)
                    ;
            ResponseEntity<String> response = restTemplate.getForEntity(builder.toUriString(),String.class);

            if(response.getStatusCodeValue()== 200){
                String[] responseBody = response.getBody().split("\n");
                if(responseBody.length>1){
                    status = responseBody[1];
                    logger.info(status);
                }
            }
        } catch (Exception ex) {
            status = "";
            logger.error("An error ocurred on HTTP request", ex);
        }
        return status;
    }





SMSREADER CLASS 


@RestController
@RequestMapping("/smsReader")
public class SmsReaderController {

    @Autowired
    private SmsReader smsReader;

    @PostMapping(consumes = MediaType.APPLICATION_XML_VALUE)
    public HashMap<String, Object> processSms(@RequestBody SmsRequest smsRequest) {
        HashMap<String, Object> response = new HashMap<>();
        try {
            smsReader.saveSms(smsRequest);
            response.put("response", "success");
        } catch (Exception ex) {
            response.put("response", "failed");
        }

        return response;
    }
}
查询处理程序类
@组成部分
公共类MsgQueryApiHandler{
私有静态最终记录器Logger=LoggerFactory.getLogger(msgqueryapidhandler.class);
RestTemplate RestTemplate=新RestTemplate();
@值(${smscMsgQuery.host}”)
私有字符串smscMsgQueryHost;
@值(${smscMsgQuery.user})
私有字符串smscMsgQueryUser;
@值(${smscMsgQuery.pass}”)
私有字符串smscMsgQueryPass;
@自动连线
公共ConfirmHttp ConfirmHttp;
公共无效msgQueryHandle(SmsRequest SmsRequest){
字符串响应=getMessageStatus(Integer.parseInt(smsRequest.getMessageId());
开关(响应){
//重试
“途中”案例:
打破
//删除队列
“已交付”案例:
打破
“过期”案例:
案例“无法交付”:
退款信息(smsRequest);
打破
}
}
私人无效退款消息(SmsRequest SmsRequest){
ChargeHttpRequest reqBody=新的ChargeHttpRequest();
requbody.setOrigSystemId(smsRequest.getOrigSystemId());
请求主体设置状态(“失败”);
整数状态码=confirmHttp.sendCDR(reqBody);
info(“来自api{}的状态代码”,statusCode);
}
公共字符串getMessageStatus(int messageId){
字符串状态=”;
试一试{
UriComponentsBuilder=UriComponentsBuilder.fromHttpUrl(smscMsgQueryHost)
.queryParam(“用户ID”,smscMsgQueryUser)
.queryParam(“密码”,smscMsgQueryPass)
.queryParam(“msgid”,messageId)
;
ResponseEntity response=restemplate.getForEntity(builder.toUriString(),String.class);
if(response.getStatusCodeValue()==200){
字符串[]responseBody=response.getBody().split(“\n”);
如果(响应体长度>1){
状态=响应体[1];
记录器信息(状态);
}
}
}捕获(例外情况除外){
地位=”;
logger.error(“HTTP请求时发生的错误”,例如);
}
返回状态;
}
SMSREADER类
@RestController
@请求映射(“/smsReader”)
公共类SMSReader控制器{
@自动连线
私人短信阅读器;
@PostMapping(consumes=MediaType.APPLICATION\u XML\u值)
公共HashMap processSms(@RequestBody SmsRequest SmsRequest){
HashMap响应=新建HashMap();
试一试{
smsReader.saveSms(smsRequest);
响应。put(“响应”、“成功”);
}捕获(例外情况除外){
响应。put(“响应”、“失败”);
}
返回响应;
}
}