接口参数回调
下午在研究rocketmq的顺序发消息遇到了。所以写个demo演示下。平时用的也挺多的
- 自定义接口 DefaultMed
package org.apache.rocketmq.example.test;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageQueue;
import java.util.List;
/**
* @Author soul yzg
* @Date 2021/2/12 17:20
* 努力学习 天天进步
*/
public interface DefaultMed {
MessageQueue select(final List<MessageQueue> mqs, final Message msg, final Object arg);
}
package org.apache.rocketmq.example.test;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageQueue;
import java.util.ArrayList;
import java.util.List;
/**
* @Author soul yzg
* @Date 2021/2/12 17:23
* 努力学习 天天进步
*/
public class DefultThas {
int count = 0;
public Integer getDefaultThas(Message msg, DefaultMed defaultMed, Object arg) {
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
count++;
}
}
});
this.getOtherMethod(defaultMed, arg, msg);
return count;
}
private void getOtherMethod(DefaultMed defaultMed, Object arg, Message msg) {
List<MessageQueue> mqs = new ArrayList<>();
for (int i = 0; i < 8; i++) {
MessageQueue messageQueue = new MessageQueue();
mqs.add(messageQueue);
};
MessageQueue select = defaultMed.select(mqs, msg, arg);
System.out.println(select);
System.out.println("回调是真的闹人啊");
}
}
测试类:
package org.apache.rocketmq.example.test;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageQueue;
import org.apache.rocketmq.remoting.common.RemotingHelper;
import javax.swing.*;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @Author soul yzg
* @Date 2021/2/12 17:22
* 努力学习 天天进步
*/
public class Main {
public static void main(String[] args) throws UnsupportedEncodingException {
DefultThas defultThas = new DefultThas();
List<Object> list = new ArrayList<>();
Integer hashKey = 123;
Message msg = new Message("topic_order_test",
"FILTER",
("Hello RocketMQ " + hashKey).getBytes(RemotingHelper.DEFAULT_CHARSET)
);
defultThas.getDefaultThas(msg, new DefaultMed() {
@Override
public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
System.out.println("传过来的arg参数:::" + arg);
System.out.println("mqs size大小:::" + mqs.size());
Integer key = (Integer) arg;
int index = key % mqs.size();
return mqs.get(index);
}
}, hashKey);
}
}
演示如下
结果:
本人纯属没事,自我总结,哈哈,jdk动态代理没记错的话,也是用了这个接口回调。