(项目)springboot整合MQ,以及应用的场景

引入依赖

<!--引入消息中间件的依赖-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-amqp</artifactId>
		</dependency>

配置

在这里插入图片描述

rabbitmq:
    host: 192.168.142.137
    port: 5672
    username: java1907
    password: 123
    virtual-host: /java1907

生产者

@Controller
@RequestMapping("product")
public class ProductController {

    //启动时检查机制
    @Reference(check = false)
    private IProductService productService;

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @RequestMapping("get/{id}")
    @ResponseBody
    public TProduct getById(@PathVariable("id") Long id){
        return productService.selectByPrimaryKey(id);
    }

    @RequestMapping("list")
    public String list(Model model){
        //1.获取数据
        List<TProduct> list = productService.list();
        model.addAttribute("list",list);
        //pageInfo
        //2.展示页面
        return "product/list";
    }

    @RequestMapping("page/{pageIndex}/{pageSize}")
    public String page(Model model,
                       @PathVariable("pageIndex") Integer pageIndex,
                       @PathVariable("pageSize") Integer pageSize){
        //1.获取数据
        PageInfo<TProduct> page = productService.page(pageIndex, pageSize);
        model.addAttribute("page",page);
        //2.展示页面
        return "product/list";
    }

    @PostMapping("add")
    public String add(ProductVO vo){
        //处理核心业务逻辑:T1
        Long newId = productService.add(vo);

        //发送一个消息到消息中间件
        //map.put("type","add");
        //map.put("data",newId);
        rabbitTemplate.convertAndSend(MQConstant.EXCHANGE.CENTER_PRODUCT_EXCHANGE,"product.add",newId);

        //product.a
        //跳转回到第一页 展示的时候,按照添加时间排序
        return "redirect:/product/page/1/1";
    }


}

消费者服务

配置

rabbitmq:
    host: 192.168.142.137
    port: 5672
    username: java1907
    password: 123
    virtual-host: /java1907
@Component
@RabbitListener(queues = "center-product-exchange-search-queue")
@Slf4j
public class CenterProductHandler {

    //1.声明队列 center-product-exchange-search-queue
    //2.绑定交换机
    //借助管理平台来实现

    @Reference
    private ISearchService searchService;

    @RabbitHandler
    public void process(Long newId){
        log.info("处理了id为:{}的消息",newId);
        searchService.synById(newId);
    }
}

用代码创建交换机

生产者RabbitConfig类

@Configuration
public class RabbitConfig {

    @Bean
    public TopicExchange initProductExchange(){
        TopicExchange productExchange = new TopicExchange(
                MQConstant.EXCHANGE.CENTER_PRODUCT_EXCHANGE,true,false);
        return productExchange;
    }
}
@Configuration
public class RabbitConfig {

    @Bean
    public TopicExchange initProductExchange(){
        TopicExchange productExchange = new TopicExchange(
                MQConstant.EXCHANGE.CENTER_PRODUCT_EXCHANGE,true,false);
        return productExchange;
    }
}
public interface MQConstant {

    public static class EXCHANGE{
        public static final String CENTER_PRODUCT_EXCHANGE = "center-product-exchange";
    }

    public static class QUEUE{
        public static final String CENTER_PRODUCT_EXCHANGE_SEARCH_QUEUE = "center-product-exchange-search-queue";
    }
}

消费者RabbitConfig类

@Configuration
public class RabbitConfig {

    //1.声明队列
    @Bean
    public Queue initProductSearchQueue(){
        Queue queue = new Queue(
                MQConstant.QUEUE.CENTER_PRODUCT_EXCHANGE_SEARCH_QUEUE,true,false,false);
        return queue;
    }

    //2.绑定交换机
    @Bean
    public TopicExchange initProductExchange(){
        TopicExchange productExchange = new TopicExchange(
                MQConstant.EXCHANGE.CENTER_PRODUCT_EXCHANGE,true,false);
        return productExchange;
    }
   //将队列和交换机绑定
    @Bean
    public Binding bindProductSearchQueueToProductExchange(
            Queue initProductSearchQueue,TopicExchange initProductExchange){
        return BindingBuilder.bind(initProductSearchQueue).to(initProductExchange).with("product.add");
    }
}

服务的调用都是发生在web层(control层)
这里的场景是,商品服务增加了往Mysql里一个商品,通过MQ去通知搜索服务,搜索服务去将Mysql的数据增量同步到solar;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值