回調,其實就是有個回應的那種感覺。
那麼,接下來,我們就用消息推送的場景,簡簡單單地講解下回調函數的使用。
直接看代碼,
先建立一個回調接口,
MessageCallBack
/**
* @Author : JCccc
* @CreateTime : 2019-2-12
* @Description :回調函數需要執行的内容
* @Point: Keep a good mood
**/
public interface MessageCallBack {
//成功
public void onSccuess(String message, String account);
//失敗
public void onFailure(String message, String account);
//重連等等
}
接下來,是模拟消息發送的用戶端,
MessageClient
/**
* @Author : JCccc
* @CreateTime : 2019-2-12
* @Description :
* @Point: Keep a good mood
**/
public class MessageClient implements MessageCallBack {
private String message;
private String account;
//重寫回調接口的方法
@Override
public void onSccuess(String message, String account) {
System.out.println("進入回調函數--"+"消息推送成功,"+"客戶是:"+account+" 推送的消息是:"+message);
}
@Override
public void onFailure(String message, String account) {
System.out.println("進入回調函數--"+"消息推送失敗,"+"客戶是:"+account+" 推送的消息是:"+message);
}
public void sendMessage(){
System.out.println("開始調用服務端進行消息的推送");
new MessageServer().send(message,account,this);
// new MessageServer().send(message,"Mike",new MessageClient(message,account));
}
public MessageClient(String message, String account) {
this.message = message;
this.account = account;
}
}
接下來,是模拟消息伺服器:
MessageServer:
/**
* @Author : JCccc
* @CreateTime : 2019-2-12
* @Description :
* @Point: Keep a good mood
**/
public class MessageServer {
public void send(String message, String account, MessageClient messageClient){
try {
System.out.println(message+" "+account+"消息推送完畢");
messageClient.onSccuess(message,account);
} catch (Exception e) {
e.printStackTrace();
messageClient.onFailure(message,account);
}
}
}
最後,寫個簡單的對外接口,提供消息推送,
MessageController
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author : JCccc
* @CreateTime : 2019-2-12
* @Description :
* @Point: Keep a good mood
**/
@RestController
public class MessageController {
@GetMapping("/sendMessage/test")
public void sendMesssage(@RequestParam String account){
String message="這是一條測試消息";
MessageClient messageClient=new MessageClient(message,account);
messageClient.sendMessage();
}
}
現在,代碼碼完了,我們打開postman來看看整個跑起來是怎麼回事,

運作結果:
可以看到控制台得輸出是
整個流程下來,應用調用消息用戶端,想要推送一條消息;
消息用戶端拿到客戶資訊和需要推送的消息後,調用消息服務端推送消息的方法進行推送操作;
消息服務端進行完推送操作後,調用用戶端的回調函數,告知推送成功或是失敗。
如果要驗證下消息推送失敗的回調,也簡單,把代碼
// int a=2/0;
加到消息服務端推送處,模拟推送過程出現異常即可。