SpringBoot之RabbitMQ篇

一、基础使用

1 引入依赖: pom.xml
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2 配置:application.yml
spring:
	rabbitmq:
	    host: 0.1.2.3
	    port: 5672
	    username: guest
	    password: guest
	    virtual-host: /
	    connection-timeout: 15000
	    listener:
	      simple:
	        concurrency: 5
	        max-concurrency: 10
	        prefetch: 1
	      #  acknowledge-mode: manual

3 生产消息
3.1 编写消息生成类:RabbitmqController
package com.chongdian.api.controller;

import com.chongdian.api.core.http.ResultResponse;
import com.chongdian.api.producer.rabbitmq.RabbitmqSender;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RequestMapping("/rabbit")
@RestController
public class RabbitmqController {

    @Autowired
    private RabbitmqSender RabbitmqSender;

    @RequestMapping("/send")
    public ResultResponse sendProduct()  {

        Map message = new HashMap ();
        message.put ("id",  1);
        message.put ("name", "test");
        RabbitmqSender.send (message);
        return ResultResponse.ok("ok");
    }
}

3.2 编写消息生产方法 KafkaSender
package com.chongdian.api.producer.rabbitmq;

import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Map;
import java.util.UUID;

@Service
public class RabbitmqSender {

    @Autowired
    private RabbitTemplate rabbitTemplate;
    public void send(Map message){

        System.out.print ("发送开始");
        rabbitTemplate.convertAndSend("luo.study", "queues1", message );
        System.out.print ("发送完成");
        //, new CorrelationData (UUID.randomUUID().toString())

    }
}

4 编写消息监听消费类
4.1 在主程序类注入开启监听
package com.chongdian.api;

import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients
@EnableRabbit //开启rabbit监听
public class ApiApplication {

	public static void main(String[] args) {
		SpringApplication.run(ApiApplication.class, args);
	}

}

4.2 自动监听处理程序
package com.chongdian.api.listener.rabbitmq;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;

import java.util.Map;


@Service
public class RabbitmqConsumer {

    @RabbitListener (queues = "queues1")
    public void receive(Map message){
        System.out.print (message);
    }
}

5 修改消息内容转译形式为json

添加config文件类

package com.chongdian.api.config;

import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbimqConfig {
    @Bean
    public Jackson2JsonMessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}

二、 手动签收

配置
rabbitmq:
    host: 1.1.1.1
    port: 5672
    username: guest
    password: guest
    virtual-host: /
    connection-timeout: 15000
    publisher-returns: true
    listener:
      simple:
        concurrency: 5
        max-concurrency: 10
        prefetch: 1
        acknowledge-mode: manual
      direct:
        acknowledge-mode: manual
监听端口代码
package com.chongdian.api.listener.rabbitmq;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.handler.annotation.Headers;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Service;
import sun.plugin2.message.Message;

import java.io.IOException;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;


@Service
public class RabbitmqConsumer {

    /**
     * 方法1
     * 直接指定queueskey自动接收消息
     */
//    @RabbitListener (queues = "queues1")
//    public void receive(Map message){
//        System.out.print (message);
//    }

    /**
     * 方法2
     * @RabbitListener 指明监听的exchange、qeuues、queueskey,
     * @RabbitListener 可自动创建并自动绑定好关系
     * me.* 标识匹配一级绑定关系 me# 标识多级匹配
     *
     */

    @RabbitListener(bindings = @QueueBinding(
        value = @Queue(value = "me.queues", durable = "true"),
        exchange = @Exchange(name="luo.study", durable = "true", type="topic"),
        key = "me.*"
    ))
    @RabbitHandler
    public void receive2(
            @Payload Map result,
            @Headers Map<String, Object> headers,
            Channel channel
    ) throws Exception {
        System.out.println("接收消息开始消费");
        System.out.println(result);

        Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);
        channel.basicAck(deliveryTag, false);
    }

}

三、 Rabbitmq配置类及AmqpAdmin管理组件的使用

package com.chongdian.api.Rest;

import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class RabbitmqRest {

    @Autowired
    private AmqpAdmin amqpAdmin;

    /**
     * 创建exchange
     */
    public void createExchange()
    {
        amqpAdmin.declareExchange(new DirectExchange("amqpadmin.exchange"));
        System.out.println("创建exchange完成");
    }

    /**
     * 创建Queue
     */
    public void createQueue()
    {
        amqpAdmin.declareQueue(new Queue("amqpadmin.queue1",true ));
        System.out.println("创建createQueue完成");
    }

    /**
     * 绑定
     */
    public void createBind()
    {
        amqpAdmin.declareBinding(
            new Binding(
                "amqpadmin.queue1",
                Binding.DestinationType.QUEUE,
                "amqpadmin.exchange",
                "amqpadmin.haha",
                null
            )
        );
    }

    /**
     *其他自己整理
     */

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot框架可以很容易地与RabbitMQ进行集成。为了实现这个目标,你需要在项目的依赖项中添加两个关键的依赖项。首先,你需要添加spring-boot-starter-amqp依赖项,它提供了与RabbitMQ进行通信的必要类和方法。其次,你还需要添加spring-boot-starter-web依赖项,以便在项目中使用Web功能。 在你的项目中创建两个Spring Boot应用程序,一个是RabbitMQ的生产者,另一个是消费者。通过这两个应用程序,你可以实现消息的发送和接收。生产者应用程序负责将消息发送到RabbitMQ的消息队列,而消费者应用程序则负责从队列中接收并处理消息。这样,你就可以实现基于RabbitMQ的消息传递系统。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot整合RabbitMQ](https://blog.csdn.net/K_kzj_K/article/details/106642250)[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: 33.333333333333336%"] - *2* [Springboot 整合RabbitMq ,用心看完这一就够了](https://blog.csdn.net/qq_35387940/article/details/100514134)[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: 33.333333333333336%"] - *3* [undefined](undefined)[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: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值