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";
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值