java 基于rabbitMQ实现消息延迟推送

项目路径

AmqpConfig类

package com.rtsm.zhjs.background.framework.rabbitmq;

//@Configuration
public class AmqpConfig {

//    public static final String FOO_EXCHANGE   = "callback.exchange.foo";
//    public static final String FOO_ROUTINGKEY = "callback.routingkey.foo";
//    public static final String FOO_QUEUE      = "callback.queue.foo";
//
//    @Value("${spring.rabbitmq.addresses}")
//    private String addresses;
//    @Value("${spring.rabbitmq.username}")
//    private String username;
//    @Value("${spring.rabbitmq.password}")
//    private String password;
//    @Value("${spring.rabbitmq.virtual-host}")
//    private String virtualHost;
//    @Value("${spring.rabbitmq.publisher-confirms}")
//    private boolean publisherConfirms;
//
//    @Bean
//    public ConnectionFactory connectionFactory() {
//        CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
//        connectionFactory.setAddresses(addresses);
//        connectionFactory.setUsername(username);
//        connectionFactory.setPassword(password);
//        connectionFactory.setVirtualHost(virtualHost);
//        /** 如果要进行消息回调,则这里必须要设置为true */
//        connectionFactory.setPublisherConfirms(publisherConfirms);
//        return connectionFactory;
//    }
//
//    @Bean
//    /** 因为要设置回调类,所以应是prototype类型,如果是singleton类型,则回调类为最后一次设置 */
//    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
//    public RabbitTemplate rabbitTemplate() {
//        RabbitTemplate template = new RabbitTemplate(connectionFactory());
//        return template;
//    }
//
//    /** 设置交换机类型  */
//    @Bean
//    public DirectExchange defaultExchange() {
//        /**
//         * DirectExchange:按照routingkey分发到指定队列
//         * TopicExchange:多关键字匹配
//         * FanoutExchange: 将消息分发到所有的绑定队列,无routingkey的概念
//         * HeadersExchange :通过添加属性key-value匹配
//         */
//        return new DirectExchange(AmqpConfig.FOO_EXCHANGE);
//    }
//
//    @Bean
//    public Queue fooQueue() {
//        return new Queue(AmqpConfig.FOO_QUEUE);
//    }
//
//    @Bean
//    public Binding binding() {
//        /** 将队列绑定到交换机 */
//        return BindingBuilder.bind(fooQueue()).to(defaultExchange()).with(AmqpConfig.FOO_ROUTINGKEY);
//    }
}

Lister类

package com.rtsm.zhjs.background.framework.rabbitmq;


//@Configuration
//@RabbitListener(queues = AmqpConfig.FOO_QUEUE)
public class Listener {

//    private static final Logger LOGGER = LoggerFactory.getLogger(Listener.class);
//
//    @RabbitHandler
//    public void process(@Payload String foo) {
//        LOGGER.info("Listener: " + foo);
//    }
}
Sender类
package com.rtsm.zhjs.background.framework.rabbitmq;

//@Component
public class Sender{

//    private static final Logger LOGGER = LoggerFactory.getLogger(Sender.class);
//
//    private RabbitTemplate rabbitTemplate;
//
//    @Autowired
//    public Sender(RabbitTemplate rabbitTemplate) {
//        this.rabbitTemplate = rabbitTemplate;
//    }
//
//    public void send(String msg) {
//        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
//        LOGGER.info("send: " + correlationData.getId());
//        this.rabbitTemplate.convertAndSend(AmqpConfig.FOO_EXCHANGE, AmqpConfig.FOO_ROUTINGKEY, msg, correlationData);
//    }
//
//    /**
//     * 设置回调
//     * @param callback
//     */
//    public void setConfirmCallback(RabbitTemplate.ConfirmCallback callback){
//        this.rabbitTemplate.setConfirmCallback(callback);
//    }
}

Test测试类

package com.rtsm.zhjs.background.generator.rebbitMQTest;

import com.rtsm.zhjs.background.service.BjxtBjszService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class RebbitMQTest {
    @Autowired
    private BjxtBjszService bjxtBjszService;

    @Test
    public void sendRebbitMQ() {
        bjxtBjszService.sendRabbitMq("send mq message");
    }

    @Test
    public void timeTask() {
      run01();
    }

    public void run01() {
        //需要执行的业务代码
        boolean flag = false;
        for( int i=0;i<5;i++) {
            System.out.println("执行查库操作");
            if(i != 3) {
                try {
                    //线程睡眠1秒
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }else {
                break;
            }

        }
    }



}

测试Controller

/**
     * 测试rabbitmq
     * @param data
     * @return
     */
    @GetMapping(value = "rabbitmq")
    @ResponseBody
    public String sendMessage(String data){
        JobEntity job = new JobEntity();
        job.setId(UUID.randomUUID().toString());
        job.setDelaySecond(10);
        job.setName("test001");
        job.setJobGroup("grou001");
        try {
            queryManager.addSimpleJob(job,DynamicJob.class,new JobDataMap());
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
        return "true";
    }
    /**
     * 测试rabbitmq
     * @return
     */
    @GetMapping(value = "rabbitmqde")
    @ResponseBody
    public String sendMessagede(String id){
        JobEntity job = new JobEntity();
        job.setId(id);
        job.setDelaySecond(10);
        job.setName("test001");
        job.setJobGroup("grou001");
        queryManager.subJob(job);
        return "true";
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Java实现RabbitMQ消息推送,首先需要引入RabbitMQ的jar包。根据引用,我们可以通过引入amqp-client的包来实现。在你的项目的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> </dependency> ``` 接下来,你需要建立与RabbitMQ的连接,创建一个通道,以及声明一个队列来发送消息。以下是一个基本的示例代码: ```java import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.Connection; import com.rabbitmq.client.Channel; public class RabbitMQProducer { private final static String QUEUE_NAME = "my_queue"; public static void main(String[] argv) throws Exception { // 建立连接 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); // 声明队列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 发送消息 String message = "Hello, RabbitMQ!"; channel.basicPublish("", QUEUE_NAME, null, message.getBytes()); System.out.println("Sent message: " + message); // 关闭连接 channel.close(); connection.close(); } } ``` 这段代码首先建立与RabbitMQ的连接,然后创建一个通道,并声明一个名为"my_queue"的队列。接着,它发送了一条消息"Hello, RabbitMQ!"到该队列中。最后,关闭了通道和连接。 以上是一个简单的Java实现RabbitMQ消息推送的例子,你可以根据自己的需求修改其中的细节。希望对你有帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [使用Java体验RabbitMQ消息的发送与消费过程](https://blog.csdn.net/cssweb_sh/article/details/125133874)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Java编程rabbitMQ实现消息的收发](https://download.csdn.net/download/weixin_38570278/12772878)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值