sprinboot 集成rqbbitmq延迟推送消息

1.jar包和配置文件之前文章已经写过,这里不再重复写了,地址:https://blog.csdn.net/shy415502155/article/details/92787814

2. 延迟推送队列配置

import java.util.HashMap;
import java.util.Map;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.CustomExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.shy.springboot.utils.Constant;

/***
 * @Title: springstarter
 * @author shy
 * @Description 延迟推送队列
 *
 */
@Configuration
public class DelayConfig {

	@Bean
    public CustomExchange delayTestExchange() {
        Map<String, Object> args = new HashMap<>();
        args.put(Constant.DELAY_ARGS_KEY, Constant.DELAY_ARGS_VALUE);
        return new CustomExchange(Constant.DELAY_TEST_EXCHANGE, Constant.X_DELAYED_MESSAGE,true, false,args);
    }

    @Bean
    public Queue testQueue() {
        Queue queue = new Queue(Constant.DELAY_TEST_QUEUE, true);
        return queue;
    }

    @Bean
    public Binding testBinding() {
        return BindingBuilder.bind(testQueue()).to(delayTestExchange()).with(Constant.DELAY_TEST_QUEUE).noargs();
    }
    
    /***
     * 	 延迟队列 delay_update_user_queue  交换器 delay_update_user_exchange
     *       
     * @return
     */
    
    @Bean
    public CustomExchange delayUpdateUserExchange() {
        Map<String, Object> args = new HashMap<>();
        args.put(Constant.DELAY_ARGS_KEY, Constant.DELAY_ARGS_VALUE);
        return new CustomExchange(Constant.DELAY_UPDATE_USER_EXCHANGE, Constant.X_DELAYED_MESSAGE,true, false,args);
    }

    @Bean
    public Queue updateUserQueue() {
        Queue queue = new Queue(Constant.DELAY_UPDATE_USER_QUEUE, true);
        return queue;
    }

    @Bean
    public Binding updateUserBinding() {
        return BindingBuilder.bind(updateUserQueue()).to(delayUpdateUserExchange()).with(Constant.DELAY_UPDATE_USER_QUEUE).noargs();
    }
}

3. 延迟推送队列消费

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import javax.annotation.Resource;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import com.shy.springboot.dao.UserDao;
import com.shy.springboot.entity.User;
import com.shy.springboot.utils.Constant;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Component
//@RabbitListener(queues = "delayqueue")
public class ConsumeDelay {
	
	@Resource
	private UserDao userDao;
	
	//@RabbitHandler
	@RabbitListener(queues = Constant.DELAY_UPDATE_USER_QUEUE)
    public void process(User user) throws ParseException, IOException{
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		user.setUser_id(1);
		int update = userDao.update(user);
        log.info("更新用户信息,更新时间为 :" + sdf.format(new Date()));
    }
	
	@RabbitListener(queues = Constant.DELAY_TEST_QUEUE)
    public void processTest(Map<String, Object> map) throws ParseException{
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        log.info("消息接受时间》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》:" + sdf.format(new Date()));
        log.info("接受的信息》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》:" + map.get("msg"));
	}
}

4. 发起请求

@RequestMapping(value = "/testmq")
@ResponseBody
public Map<String, Object> consumeMq() throws ParseException {
	User user = new User();
	user.setUser_name("MQ_" + CommonUtils.getRandomStr(6, 1));
	user.setUser_pass(CommonUtils.getRandomStr(12, 1));
	user.setSex(1);
	user.setToken(null);
	String birthday = "1999-08-01";
	Date birthdayDate = CommonUtils.stringToDate(birthday, "yyyy-MM-dd");
	user.setBirthday(birthdayDate);
	user.setCreate_time(new Date());
	user.setUpdate_time(new Date());
	user.setIs_del(Constant.IS_DEL_NO);
	Map<String, Object> returnMap = new HashMap<String, Object>();
	log.info("请求发起时间 》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》 :" + CommonUtils.dateFormat(new Date(), null));
	delayrabbitTemplate.convertAndSend(Constant.DELAY_UPDATE_USER_EXCHANGE, Constant.DELAY_UPDATE_USER_QUEUE, user,
			new MessagePostProcessor() {
				@Override
				public Message postProcessMessage(Message message) throws AmqpException {
					message.getMessageProperties().setHeader(Constant.DELAY_HEADER_KEY, 60000);
					return message;
				}
			});
	String msg = "進入fanout.test隊列,即將被消費... ";
	rabbitTemplate.convertAndSend("testFanoutExchange", "fanout.test", msg);
	// 發送DELAY_TEST_QUEUE
	Map<String, Object> map = new HashMap<String, Object>();
	map.put("msg", "即將往 DELAY_TEST_QUEUE 隊列中發送消息,请求发起时间 :" + CommonUtils.dateFormat(new Date(), null));
	delayrabbitTemplate.convertAndSend(Constant.DELAY_TEST_EXCHANGE, Constant.DELAY_TEST_QUEUE, map,
			new MessagePostProcessor() {
				@Override
				public Message postProcessMessage(Message message) throws AmqpException {
					message.getMessageProperties().setHeader(Constant.DELAY_HEADER_KEY, 60000);
					return message;
				}
			});
	return returnMap;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是SpringBoot集成极光推送进行推送消息的步骤和代码示例: 1. 引入极光推送Java-SDK的依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>cn.jiguang</groupId> <artifactId>jiguang-common</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>cn.jiguang</groupId> <artifactId>jiguang-api</artifactId> <version>1.3.0</version> </dependency> ``` 2. 配置极光推送的AppKey和MasterSecret 在SpringBoot的配置文件中添加如下配置: ```properties jpush.appKey=yourAppKey jpush.masterSecret=yourMasterSecret ``` 3. 编写推送消息的代码 在需要推送消息的地方,注入JPushClient对象,然后调用JPushClient的相关方法即可实现推送消息的功能。以下是一个简单的推送消息的示例: ```java @RestController public class PushController { @Autowired private JPushClient jPushClient; @PostMapping("/push") public String pushMessage(@RequestParam("message") String message) { PushPayload payload = PushPayload.newBuilder() .setPlatform(Platform.all()) .setAudience(Audience.all()) .setNotification(Notification.alert(message)) .build(); try { PushResult result = jPushClient.sendPush(payload); return result.toString(); } catch (APIConnectionException | APIRequestException e) { e.printStackTrace(); return e.getMessage(); } } } ``` 在上述代码中,我们构建了一个PushPayload对象,设置了推送平台、推送对象和推送消息,然后调用JPushClient的sendPush方法发送推送消息。 以上就是SpringBoot集成极光推送进行推送消息的基本步骤和代码示例。希望能够对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值