springboot 整合 rabbitmq

来源:互联网 发布:tp框架隐藏index.php 编辑:程序博客网 时间:2024/05/21 14:56

pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.example</groupId>    <artifactId>springboot</artifactId>    <version>0.0.1-SNAPSHOT</version>    <packaging>jar</packaging>    <name>springboot</name>    <description>Demo project for Spring Boot</description>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.6.RELEASE</version>        <relativePath /> <!-- lookup parent from repository -->    </parent>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>        <java.version>1.8</java.version>        <spring.version>4.3.13.RELEASE</spring.version>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>1.3.0</version>        </dependency>        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->        <dependency>            <groupId>com.google.code.gson</groupId>            <artifactId>gson</artifactId>            <version>2.8.0</version>        </dependency>        <!-- mysql驱动 mysql-connector-java -->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>5.1.35</version>        </dependency>        <!-- 数据库连接池 druid -->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>            <version>1.0.26</version>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-amqp</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-configuration-processor</artifactId>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.springframework.retry</groupId>            <artifactId>spring-retry</artifactId>            <version>1.2.2.RELEASE</version>        </dependency>        <dependency>            <groupId>org.quartz-scheduler</groupId>            <artifactId>quartz</artifactId>            <version>2.2.1</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context-support</artifactId>            <version>${spring.version}</version>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

我刚开始启动项目时报错,最后发现是由于缺少了jar包以及jar包版本不一致,我使用的是springboot 1.5.6,如果和我一样可以参考上面的,我本机测试是没问题的。不一样的话,可以自己去百度查看你使用的springboot版本对应的jar包版本号。

application.yml

server:  context-path: /spring-boot  port: 8082spring:  rabbitmq:    host: 部署了rabbitmq的主机ip    port: 5672    username: qinwei    password: 123456    virtual-host: /    publisherConfirms: true    listener:      simple:        acknowledge-mode: manual        concurrency: 5        max-concurrency: 10    cache:      channel:        size: 50mq:  topicExchange: spring-exchange  queue: spring_queue  routeKey: spring_key  myQueue: rabbit_queue  myRouteKey: rabbit_key

MQProperties.java

@Component@ConfigurationProperties(prefix = "mq")public class MQProperties {    private String topicExchange;    private String routeKey;    private String queue;    private String myQueue;    private String myRouteKey;    public String getMyQueue() {        return myQueue;    }    public void setMyQueue(String myQueue) {        this.myQueue = myQueue;    }    public String getMyRouteKey() {        return myRouteKey;    }    public void setMyRouteKey(String myRouteKey) {        this.myRouteKey = myRouteKey;    }    public String getTopicExchange() {        return topicExchange;    }    public void setTopicExchange(String topicExchange) {        this.topicExchange = topicExchange;    }    public String getRouteKey() {        return routeKey;    }    public void setRouteKey(String routeKey) {        this.routeKey = routeKey;    }    public String getQueue() {        return queue;    }    public void setQueue(String queue) {        this.queue = queue;    }}

RabbitMQConfig.java

@Component@EnableRabbitpublic class RabbitMQConfig {    @Autowired    private MQProperties mqProperties;    @Autowired    private CachingConnectionFactory connectionFactory;    /*这里的connectionFactory不需要手动创建,因为org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration.RabbitConnectionFactoryCreator已经创建好了,只要你在application.yml中添加了相应的配置就可以了*/    @Bean    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)    public RabbitTemplate rabbitTemplate() {        return new RabbitTemplate(connectionFactory);    }    @Bean    public Queue queue1() {        return new Queue(mqProperties.getQueue());    }    @Bean    public Queue queue2() {        return new Queue(mqProperties.getMyQueue());    }    @Bean    public TopicExchange topicExchange() {        return new TopicExchange(mqProperties.getTopicExchange(), true, false);    }    @Bean    public Binding binding1() {        // *表示一个单词,#表示零个或多个单词        return BindingBuilder.bind(queue1()).to(topicExchange()).with(mqProperties.getRouteKey() + ".*");    }    @Bean    public Binding binding2() {        return BindingBuilder.bind(queue2()).to(topicExchange()).with(mqProperties.getMyRouteKey() + ".*");    }}

生产者 Sender.java

@Componentpublic class Sender implements RabbitTemplate.ConfirmCallback {    private RabbitTemplate rabbitTemplate;    @Autowired    private MQProperties mqProperties;    public Sender(RabbitTemplate rabbitTemplate) {        this.rabbitTemplate = rabbitTemplate;        rabbitTemplate.setConfirmCallback(this);    }    public void send1(String message) {        System.out.println("Sender1 : " + message);        rabbitTemplate.convertAndSend(mqProperties.getTopicExchange(), mqProperties.getRouteKey() + ".springboot",                message, new CorrelationData(UUID.randomUUID().toString()));    }    public void send2(String message) {        System.out.println("Sender2 : " + message);        rabbitTemplate.convertAndSend(mqProperties.getTopicExchange(), mqProperties.getMyRouteKey() + ".qinwei",                message, new CorrelationData(UUID.randomUUID().toString()));    }    @Override    public void confirm(CorrelationData correlationData, boolean ack, String cause) {        System.out.println(" 回调id:" + correlationData);        if (ack) {            System.out.println("消息成功消费");        } else {            System.out.println("消息消费失败:" + cause);        }    }}

消费者 Receiver.java

@Componentpublic class Receiver {    @RabbitListener(queues = "${mq.queue}")    public void receive1(Message message, Channel channel, String msg) {        System.out.println("消费内容为1: " + new String(message.getBody()));        try {            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);        } catch (Exception e) {            e.printStackTrace();        }    }    @RabbitListener(queues = "${mq.myQueue}")    public void receive2(Message message, Channel channel, String msg) {        System.out.println("消费内容为2: " + msg);        try {            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);        } catch (Exception e) {            e.printStackTrace();        }    }}

测试类 RabbitMqTest .java

@RestControllerpublic class RabbitMqTest {    @Autowired    private Sender sender;    @RequestMapping(value = "/rabbitmq/{message}", method = RequestMethod.GET)    public String hello(@PathVariable("message") String message) {        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss.SSS");        String context = message + " " + sdf.format(new Date());        /*如果message为qinwei1则只发送到queue1;qinwei2只发送到queue2;qinwei12则同时发送到2个queue*/        if (message.contains("1")) {            sender.send1(context);        }        if (message.contains("2")) {            sender.send2(context);        }        return context;    }}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 久坐小腿浮肿怎么办 大腿肌肉水肿怎么办 老年人脚肿怎么办 小腿肿胀发硬怎么办 小腿肚肿胀发硬怎么办 老人家手脚麻痹怎么办 颈椎疼痛难忍怎么办 老人手麻怎么办 老年人手脚麻木怎么办 颈椎病手发麻怎么办 晚上手麻怎么办 半夜手臂麻到醒怎么办 颈椎病头皮发麻怎么办 睡觉左手发麻怎么办 睡觉后手发麻怎么办 孕晚期手麻手胀怎么办 高血压手脚发麻怎么办 手脚发麻怎么办? 脚底发麻发热怎么办 风湿腰痛怎么办 颈椎病双手麻木怎么办 老年人手抖怎么办 突然手抖怎么办 激动手抖怎么办 低血糖犯了怎么办 我手机不见了怎么办 长得太帅被打怎么办 婚姻不合怎么办 三观崩塌怎么办 右腿比左腿粗怎么办 宝宝吃着奶睡觉怎么办 不支持gpt分区怎么办 头顶有点脱发怎么办 尿频尿不尽怎么办 夜间尿频怎么办 黑便怎么办 腹泻便血怎么办 感冒舌苔发黑怎么办 左睾丸疼怎么办 心突然疼怎么办 睾丸下垂怎么办