开发含有集团队列操作的服务

匿名 (未验证) 提交于 2019-12-02 23:37:01

发送消息和拉取消息

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 #队列主题
  • consumerGroupName: shtel-paas-c-pg2
    topicDealer:
    • ctgMqConsumStrategy: “com.shtel.paas.sdk.core.mq.ctgmq.DefaultCtgMqConsumStrategy”
      topic: shtel-paas-pq2-topic
      producerGroup:
  • 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
文章来源: https://blog.csdn.net/weixin_39810017/article/details/90755417
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!