Uso simple de RabbitMQ

El propósito principal aquí es poner un mensaje en mq y luego procesarlo en mq.
Productor:
Paso 1: Crear un nombre de cola:

public class ConstantMqName {
    
    
    //查询记录队列
    public static final String MQ_RECORD_SEARCH_CONTENT= "mq-record-search-content";
}
import com.hisi.ie.common.constant.ConstantMqName;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitConfig {
    
    
    @Bean
    public Queue searchContentQueue() {
    
    
        return new Queue(ConstantMqName.MQ_RECORD_SEARCH_CONTENT, true);
    }
}

Paso 2: Encapsule el mensaje que se enviará en un objeto y colóquelo en la cola:
(La encapsulación del mensaje aquí se basa en la demanda)

import org.springframework.amqp.core.AmqpTemplate;
@Service
public class HisiSearchServiceImpl implements HisiSearchService {
    
    
   @Autowired
   private AmqpTemplate rabbitTemplate;
   
   //组装写入mq的数据
   HisiRecordSearchParam paramToMQ = new HisiRecordSearchParam();
   paramToMQ.setContent(content);
   paramToMQ.setSearchEngine(queryFieldList);
   paramToMQ.setSearchs(hisiIeSearchParam.getSearchs());
   paramToMQ.setFilters(filters);
   paramToMQ.setUserId(hisiIeSearchParam.getUserId());
   logger.info("paramToMQ ====>> " + JSONObject.toJSONString(paramToMQ));
   rabbitTemplate.convertAndSend(ConstantMqName.MQ_RECORD_SEARCH_CONTENT, JSONObject.toJSONString(paramToMQ));
 

Los consumidores consumen: el
primer paso: crear un nombre de cola

import com.hisi.ie.common.constant.ConstantMqName;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitConfig {
    
    
    @Bean
    public Queue searchContentQueue() {
    
    
        return new Queue(ConstantMqName.MQ_RECORD_SEARCH_CONTENT, true);
    }
}

Paso 2: el consumidor realiza un procesamiento específico en el mensaje recibido
(aquí, el mensaje recibido se procesa y el resultado procesado se escribe en la caché de redis)

@Component
public class RecordSearchReceiver {
    
    
    private static Logger logger = LoggerFactory.getLogger(RecordSearchReceiver.class);

    @Autowired
    private SearchRecordMapper searchRecordMapper;

    @Autowired
    StringRedisTemplate stringRedisTemplate;

    //这里的注解很重要,监听具体的某一个消息队列
    @RabbitHandler
    @RabbitListener(queues = ConstantMqName.MQ_RECORD_SEARCH_CONTENT)
    public void process(String message) {
    
    
        logger.info("接收到搜索记录,开始处理[" + message + "]");
        try {
    
    
            SearchRecord searchVo = new SearchRecord();
            CombineSearchVo combineSearchVo = null;
            Set<String> content = new HashSet<>();
            //对接收到的消息进行处理,到此就是消费者接收到的消息,后面根据要求对消息做处理
            HisiRecordSearchParam recordSearch = JSON.parseObject(message, HisiRecordSearchParam.class);
            String searchContent = recordSearch.getContent();
            content.add(searchContent );
            contentToRedis(content);

        } catch (Exception e) {
    
    
            logger.error("搜索记录入库异常!", e);
        }
        logger.info("搜索记录入库结束!");
    }

    private void contentToRedis(Set<String> content) {
    
    
        Date d = new Date();
        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
        long rightTime = (long) (d.getTime() + 8 * 60 * 60 * 1000);
        String dateNowStr = sd.format(rightTime);
        String key = "searchContent-" + dateNowStr;
        try {
    
    
            for (String keyParam : content) {
    
    
            	//序列化
                stringRedisTemplate.setValueSerializer(new StringRedisSerializer());
                //这里缓存的是词汇以及对应的词频
                stringRedisTemplate.opsForHash().increment(key, keyParam, 1);
            }
        } catch (Exception e) {
    
    
            logger.error("写入redis缓存异常!", e);
        }
    }

La explicación anterior es rabbitmq,
ahora obtenga los datos en el caché de redis (también puede obtener los datos en el caché de redis a través del cronograma de tiempo de cuarzo)

 Date d = new Date();
 SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
 long rightTime = (long) (d.getTime() + 8 * 60 * 60 * 1000);
 String dateNowStr = sd.format(rightTime);
 String key = "searchContent-" + dateNowStr;
 //这里存储的结构类似(key,(key,value))格式,通过key名进行获取对应的结果
 Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries(key)         

El uso general es así. Se diseñan varios servicios al hacer el proyecto. No es fácil presentar todo el código. Aquí está el contenido clave. En cuanto al procesamiento específico, ¡sigamos la lógica del negocio!

Supongo que te gusta

Origin blog.csdn.net/qq_32115447/article/details/106944410
Recomendado
Clasificación