首页 > 编程语言 >java——spring boot集成RabbitMQ——高级特效——封装消息的元数据

java——spring boot集成RabbitMQ——高级特效——封装消息的元数据

时间:2023-02-26 18:33:47浏览次数:48  
标签:java spring boot System org println import message out

 

 

 

 

 

交换机和队列支持持久化。现在我们也需要给消息设计元数据

DeliveryMode

设置为2,表示支持消息的持久化。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=======================================================================================

 

 

 

 

 

 

 

接上一边博文。  修改文件:

 

发送者:

package org.example.sender;

import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageDeliveryMode;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 消息生产者 发送消息
 */
@Component
public class MessageSender {

    @Autowired
    RabbitTemplate rabbitTemplate;

    /**
     * 发送消息
     * @param info
     */
    public void send(String info)
    {

        System.out.println("发送消息>>>"+info);

//        CorrelationData correlationData = new CorrelationData();
//
//        String uuid = UUID.randomUUID().toString();
//        System.out.println(uuid);
//
//        correlationData.setId(uuid);

//        rabbitTemplate.convertAndSend("amqp-topic","huawei.a",info,correlationData);

        /**
         *     public static int toInt(MessageDeliveryMode mode) {
         *         switch (mode) {
         *         case NON_PERSISTENT:
         *             return 1;
         *         case PERSISTENT:
         *             return 2;
         *         default:
         *             return -1;
         */


        MessageProperties messageProperties = new MessageProperties();

        messageProperties.setDeliveryMode(MessageDeliveryMode.PERSISTENT);

        messageProperties.setExpiration("20000"); // 设置过期时间20秒

        messageProperties.setAppId("abc123456");

        messageProperties.setHeader("国家1","中国1");
        messageProperties.setHeader("国家2","中国2");


        Message message = new Message(info.getBytes(), messageProperties);

        System.out.println(message);

        rabbitTemplate.convertAndSend("amqp-topic", "huawei.a", message);

    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

消费者:

package org.example.receiver;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.io.IOException;


@Component
public class TopicReceiver {

    //分别监听名称为xiaomi、huawei的队列
    @RabbitListener(queues = "xiaomi")
    public void handlerXM(Message message,String msg, Channel channel) throws IOException {

        System.out.println("小米:"+msg);

        //手动签收,不启动批量签收
        channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);

        System.out.println(message.getMessageProperties().getDeliveryTag());
    }


    @RabbitListener(queues = "huawei")
    public void handlerHW(Message message,String msg, Channel channel) throws IOException {


        System.out.println("华为:"+msg);

        System.out.println(message.getMessageProperties().getHeaders());

        System.out.println((String) message.getMessageProperties().getHeader("国家2"));

        System.out.println(message);

        System.out.println(message.getMessageProperties().getExpiration());

        System.out.println(message.getMessageProperties().getAppId());



        //手动签收,不启动批量签收
        //告诉rmq签收的消息的id。以及是否批量签收
        channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);

    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

======================================================================================

 

 

 

 

 

 

 

 

 

参考:https://blog.csdn.net/qq_43623492/article/details/124259773

 

 

 

 

 

 

 

 

标签:java,spring,boot,System,org,println,import,message,out
From: https://www.cnblogs.com/xiaobaibailongma/p/17157254.html

相关文章

  • SpringBoot内置tomcat参数调优
    1.默认配置可通过org.springframework.boot.autoconfigure.web.ServerProperties查看,其中包括属性tomcat、jetty、undertow三种服务器的设置,默认启用tomcat。#tomcat......
  • Java基础——(综合练习)生成5位验证码
    packagecom.zhao.test;importjava.util.Random;publicclassTest16{/*需求:定义方法实现随机产生一个5位的验证码验证码格式:长度为5前四......
  • 学习方法和说明(springMVC)
    一.ssm框架ssm:mybatis+Spring+SpringMVC  现在已经学过的东西:JavaSE:认识Java,可以说看的懂一些基本代码,但是不知道可以干什么JavaWeb:开始了解Java,有意识到前后端......
  • java的排序问题
    普通排序对于基础数据类型的排序,基本只是调用一下方法如java的 1Arrays.sort(nums);那么如何自定义排序规则呢?自定义排序规则:假设现在有这么个问题,有n个学生, 每......
  • JAVAWEB学习-继续增删改查-完成发布功能-04
    今天接着上回的进度,今天把撰稿人发布新闻的功能弄好了,也就是增这部分,顺便优化了一下界面,让界面更好看了一点点。先看一下效果,代码放后边:  首先登录,进入撰稿人界面,......
  • [Java基础] 数据类型
    数据类型(基础类型)整型byte、short、int、long///整型///byte(1字节=8bit)///short(2字节)///int(4字节)///long(8字节)privatestaticvoid......
  • system.map u-boot.map
    System.map linuxkernel编译后产生的System.map文件是通过如下命令生成的nmvmlinux|sort|less上图中的第二列表示符号类型,如果是小写字母,一般表示局部性,......
  • Java thread.setDaemon使用示例代码 守护进程
    这个例子写的非常不错,易于理解下面是一个简单的Java示例代码,演示如何使用Thread.setDaemon()方法将线程设置为守护线程:点击查看代码packagecom.kaka.rili;publiccl......
  • java——spring boot集成RabbitMQ——高级特效——可靠性投递——ack和nack
          第一种情况:关闭ack。不做任何ack。消息还在。如果消费者重启会话,消息还在,消费者下一次还会继续消费。(消费者断开这次会话,消息才会回到队列)  第三......
  • 三天吃透Java虚拟机面试八股文
    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校......