发送消息和拉取消息
package com.shtel.paas.service.mq;
import java.io.UnsupportedEncodingException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import com.ctg.mq.api.exception.MQException;
import com.ctg.mq.api.exception.MQProducerException;
import com.shtel.paas.sdk.core.PaasBaseRequest;
import com.shtel.paas.sdk.core.PaasBaseResponse;
import com.shtel.paas.sdk.core.PaasDefaultObject;
import com.shtel.paas.sdk.core.RefreshableRestController;
import com.shtel.paas.sdk.core.mq.ctgmq.EnableCtgMq;
import com.shtel.paas.sdk.core.mq.ctgmq.ICtgMqManager;
import com.shtel.paas.service.mq.domain.MqRespContent;
import com.shtel.paas.service.mq.domain.SendMsgRequest;
//使用@EnableCtgMq注解,系统会自动装配一个ICtgMqManager对象,后续使用@Autowired注入后即可进行队列相关操作
@RefreshableRestController
@EnableCtgMq
public class CtgmqService {
@Autowired ICtgMqManager mq; @GetMapping("/pullmsg/{topic}") public PaasBaseResponse<MqRespContent> pullmsg(@PathVariable String topic) throws UnsupportedEncodingException, MQException, InterruptedException { MqRespContent mrc = new MqRespContent(); mrc.setMsgs(mq.pullMsg(topic)); PaasBaseResponse<MqRespContent> rep = new PaasBaseResponse<>(mrc); return rep; } @PostMapping("/sendmsg") public PaasBaseResponse<PaasDefaultObject> sendmsg(@RequestBody PaasBaseRequest<SendMsgRequest> req) throws MQProducerException, UnsupportedEncodingException { mq.createMsg(req.getBody().getTopic(), req.getBody().getKey(), req.getBody().getTag(), req.getBody().getMsg().getBytes("utf-8")); PaasBaseResponse<PaasDefaultObject> rep = new PaasBaseResponse<>(new PaasDefaultObject()); return rep; }
}
接收回调消息
// 写一个回调类 ,必须实现ICtgMqConsumStrategy,也要是一个springbean,使用@Component注解
@Component
public class DefaultCtgMqConsumStrategy implements ICtgMqConsumStrategy {
private static final Logger logger = LoggerFactory.getLogger(DefaultCtgMqConsumStrategy.class);
@Override public void dealMsg(String body,String key,String tag) { logger.info(body); }
}
队列配置
ctgmq:
clientVersion: V1 #2018.12.28新增1.x的消费模式,通过该配置来区分,可选项V1,V2,默认值V2
disableProducer: false #是否关闭消息生产者,默认false
disablePullConsumer: true #是否关闭消息拉模式消费者,默认false
disableConsumer: true #是否关闭消息推模式消费者,默认false
namesrvAddr: 10.145.205.112:9876 #nameserver地址
authID: admin
authPWD: 123456
tenantID: defaultMQTenantID #租户ID,默认defaultMQTenantID
clusterName: defaultMQBrokerCluster #集群名称,默认是defaultMQBrokerCluster
##############队列性能配置,基本不用变化######################
maxMessageSize: 131072
sendMsgTimeout: 3000
compressMsgBodyOverHowmuch: 4096
consumeOrderly: false
batchSize: 1
consumerClientCallbackExecutorThreads: 1
consumerClientWorkerThreads: 2
consumerAbMsgProcNetCallbackExecutorThreads: 5
consumerAbMsgProcNetWorkerThreads: 6
##############队列性能配置,基本不用变化######################
consumerGroup:
- consumerGroupName: shtel-paas-c-pg1 #推模式消费组
topicDealer:- ctgMqConsumStrategy: “com.shtel.paas.sdk.core.mq.ctgmq.DefaultCtgMqConsumStrategy” #自定义的回调类名
topic: shtel-paas-pq1-topic #队列主题
- ctgMqConsumStrategy: “com.shtel.paas.sdk.core.mq.ctgmq.DefaultCtgMqConsumStrategy” #自定义的回调类名
- consumerGroupName: shtel-paas-c-pg2
topicDealer:- ctgMqConsumStrategy: “com.shtel.paas.sdk.core.mq.ctgmq.DefaultCtgMqConsumStrategy”
topic: shtel-paas-pq2-topic
producerGroup:
- ctgMqConsumStrategy: “com.shtel.paas.sdk.core.mq.ctgmq.DefaultCtgMqConsumStrategy”
- producerGroupName: shtel-paas-p-pg1 #生产者组
topic: shtel-paas-pq1-topic #队列主题 - producerGroupName: shtel-paas-p-pg2
topic: shtel-paas-pq2-topic
pullConsumerGroup: - groupName: shtel-paas-c-pg3 #拉模式消费组
topic: shtel-paas-pq1-topic #队列主题 - groupName: shtel-paas-c-pg4
topic: shtel-paas-pq2-topic