![JAR search and dependency download from the Maven repository](/logo.png)
com.tvd12.ezymq.common.EzyMQRpcProxyBuilder Maven / Gradle / Ivy
package com.tvd12.ezymq.common;
import com.tvd12.ezymq.common.codec.EzyMQBytesDataCodec;
import com.tvd12.ezymq.common.codec.EzyMQDataCodec;
import com.tvd12.ezymq.common.setting.EzyMQRpcSettings;
import com.tvd12.ezymq.common.setting.EzyMQSettings;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@SuppressWarnings({"rawtypes", "unchecked"})
public abstract class EzyMQRpcProxyBuilder<
S extends EzyMQRpcSettings,
P extends EzyMQProxy,
PB extends EzyMQRpcProxyBuilder
>
extends EzyMQProxyBuilder {
protected final Map requestTypeByCommand =
new HashMap<>();
protected final Map> messageTypeMapByTopic =
new HashMap<>();
@Override
public EzyMQRpcSettings.Builder settingsBuilder() {
return (EzyMQRpcSettings.Builder) super.settingsBuilder();
}
@Override
protected abstract EzyMQRpcSettings.Builder newSettingBuilder();
public PB mapRequestType(String cmd, Class> requestType) {
this.requestTypeByCommand.put(cmd, requestType);
return (PB) this;
}
public PB mapRequestTypes(Map requestTypes) {
this.requestTypeByCommand.putAll(requestTypes);
return (PB) this;
}
public PB mapTopicMessageType(
String topic,
String cmd,
Class> messageType
) {
this.messageTypeMapByTopic.computeIfAbsent(
topic,
k -> new HashMap<>()
).put(cmd, messageType);
return (PB) this;
}
public PB mapTopicMessageTypes(
String topic,
Map> messageTypes
) {
this.messageTypeMapByTopic.computeIfAbsent(
topic,
k -> new HashMap<>()
).putAll(messageTypes);
return (PB) this;
}
@Override
protected Set> getBeanAnnotationClasses() {
Set> annotationClasses = new HashSet<>(
super.getBeanAnnotationClasses()
);
annotationClasses.add(getMessageConsumerAnnotationClass());
return annotationClasses;
}
protected abstract Class> getMessageConsumerAnnotationClass();
@Override
protected void decorateSettingBuilder(
EzyMQSettings.Builder settingsBuilder
) {
EzyMQRpcSettings.Builder builder =
(EzyMQRpcSettings.Builder) settingsBuilder;
builder
.mapRequestTypes(requestTypeByCommand)
.mapTopicMessageTypes(messageTypeMapByTopic)
.addRequestInterceptors(
beanContext.getSingletons(
getRequestInterceptorAnnotationClass()
)
)
.addRequestHandlers(
beanContext.getSingletons(
getRequestHandlerAnnotationClass()
)
)
.addMessageConsumers(
beanContext.getSingletons(
getMessageConsumerAnnotationClass()
)
);
}
@Override
protected EzyMQDataCodec newDataCodec() {
return EzyMQBytesDataCodec.builder()
.marshaller(marshaller)
.unmarshaller(unmarshaller)
.messageSerializer(messageSerializer)
.messageDeserializer(messageDeserializer)
.mapRequestTypes(settings.getRequestTypeByCommand())
.mapTopicMessageTypes(settings.getMessageTypeMapByTopic())
.build();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy