天天看點

JAVA回調函數簡單講解 CallBack

回調,其實就是有個回應的那種感覺。

那麼,接下來,我們就用消息推送的場景,簡簡單單地講解下回調函數的使用。

直接看代碼,

先建立一個回調接口,

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來看看整個跑起來是怎麼回事,

JAVA回調函數簡單講解 CallBack

運作結果:

 可以看到控制台得輸出是

JAVA回調函數簡單講解 CallBack

整個流程下來,應用調用消息用戶端,想要推送一條消息;

                         消息用戶端拿到客戶資訊和需要推送的消息後,調用消息服務端推送消息的方法進行推送操作;

                        消息服務端進行完推送操作後,調用用戶端的回調函數,告知推送成功或是失敗。

  如果要驗證下消息推送失敗的回調,也簡單,把代碼

// int a=2/0;      

加到消息服務端推送處,模拟推送過程出現異常即可。