SpringBoot整合生产者

90 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情

SpringBoot整合生产者

步骤

1 创建生产者工程

创建一个新的模板

2 添加依赖



<dependencies>

    <!--spring上下文-->

 <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-context</artifactId>

        <version>5.1.7.RELEASE</version>

    </dependency>

    <!--spring整合amqp-->

 <dependency>

        <groupId>org.springframework.amqp</groupId>

        <artifactId>spring-rabbit</artifactId>

        <version>2.1.8.RELEASE</version>

    </dependency>

    <!--单元测试-->

 <dependency>

        <groupId>junit</groupId>

        <artifactId>junit</artifactId>

        <version>4.12</version>

    </dependency>



    <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-test</artifactId>

        <version>5.1.7.RELEASE</version>

    </dependency>

</dependencies>

 <!--编译插件  -->

<build>

    <plugins>

        <plugin>

            <groupId>org.apache.maven.plugins</groupId>

            <artifactId>maven-compiler-plugin</artifactId>

            <version>3.8.0</version>

            <configuration>

                <source>1.8</source>

                <target>1.8</target>

            </configuration>

        </plugin>

    </plugins>

</build>

3 配置整合 配置基本信息以及交换机和队列的关系

配置基本信息

 #ip 172.16.98.133

rabbitmq.host=localhost

 #端口

rabbitmq.port=5672

 #用户名

rabbitmq.username=weiyihe

 #密码

rabbitmq.password=weiyihe

 #虚拟机

rabbitmq.virtual-host= /itcast_wyh

配置spring-rabbitmq-producer.xml,交换机和队列的绑定方式

 <? xml version="1.0" encoding="UTF-8" ?>

<beans xmlns="http://www.springframework.org/schema/beans"

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xmlns:context="http://www.springframework.org/schema/context"

 xmlns:rabbit="http://www.springframework.org/schema/rabbit"

 xsi:schemaLocation="http://www.springframework.org/schema/beans

 http://www.springframework.org/schema/beans/spring-beans.xsd

 http://www.springframework.org/schema/context

 https://www.springframework.org/schema/context/spring-context.xsd

 http://www.springframework.org/schema/rabbit

 http://www.springframework.org/schema/rabbit/spring-rabbit.xsd" >



    <!--加载配置文件--> <!--location是配置rabbitMQ的目录-->

 <context:property-placeholder location="classpath:application.properties" />



    <!-- 定义rabbitmq connectionFactory -->

 <rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}"

 port="${rabbitmq.port}"

 username="${rabbitmq.username}"

 password="${rabbitmq.password}"

 virtual-host="${rabbitmq.virtual-host}" />

    <!--定义管理交换机、队列-->

 <rabbit:admin connection-factory="connectionFactory" />



    <!--

 定义持久化队列,不存在则自动创建;不绑定到交换机则绑定到默认交换机

 默认交换机类型为direct,名字为:"",路由键为队列的名称

 -->



 <!--

 id:bean的名称

 name:queue的名称

 auto-declare:自动创建

 auto-delete:自动删除。最后一个消费者和该队列断开连接后,自动删除队列

 exclusive:是否独占(排他)

 durable:是否持久化

 -->

 <rabbit:queue id="spring_queue" name="spring_queue"  auto-declare="true" />



    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~广播;所有队列都能收到消息~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

 <!--定义广播交换机中的持久化队列,auto-declare不存在则自动创建-->

 <rabbit:queue id="spring_fanout_queue_1" name="spring_fanout_queue_1" auto-declare="true" />



    <!--定义广播交换机中的持久化队列,不存在则自动创建-->

 <rabbit:queue id="spring_fanout_queue_2" name="spring_fanout_queue_2" auto-declare="true" />



    <!--定义广播类型交换机;并绑定上述两个队列-->

 <rabbit:fanout-exchange id="spring_fanout_exchange" name="spring_fanout_exchange" auto-declare="true" >

        <rabbit:bindings>

            <rabbit:binding queue="spring_fanout_queue_1" />

            <rabbit:binding queue="spring_fanout_queue_2" />

        </rabbit:bindings>

    </rabbit:fanout-exchange>



    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~通配符;*匹配一个单词,#匹配多个单词 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

 <!--定义广播交换机中的持久化队列,不存在则自动创建-->

 <rabbit:queue id="spring_topic_queue_star" name="spring_topic_queue_star" auto-declare="true" />

    <!--定义广播交换机中的持久化队列,不存在则自动创建-->

 <rabbit:queue id="spring_topic_queue_well" name="spring_topic_queue_well" auto-declare="true" />

    <!--定义广播交换机中的持久化队列,不存在则自动创建-->

 <rabbit:queue id="spring_topic_queue_well2" name="spring_topic_queue_well2" auto-declare="true" />



    <rabbit:topic-exchange id="spring_topic_exchange" name="spring_topic_exchange" auto-declare="true" >

        <rabbit:bindings>

            <rabbit:binding pattern="weiyihe.*" queue="spring_topic_queue_star" />

            <rabbit:binding pattern="weiyihe.#" queue="spring_topic_queue_well" />

            <rabbit:binding pattern="itcast.#" queue="spring_topic_queue_well2" />

        </rabbit:bindings>

    </rabbit:topic-exchange>



    <!--定义rabbitTemplate对象操作可以在代码中方便发送消息-->

 <rabbit:template id="rabbitTemplate" connection-factory="connectionFactory" />

</beans>

4 编写代码注入列使用方法发送消息

由于xml配置文件定义了 auto-declare="true",所以代码运行起来会大量创建队列

测试代码

package com.wyh;



import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.amqp.rabbit.core.RabbitTemplate;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;



 /**

 *  @program:  SpringBoot-RabbitMQ

 *  @description:  消费者

 *  @author:  魏一鹤

 *  @createDate:  2022-03-31 22:47

 **/



 //spring配置文件

@RunWith(SpringJUnit4ClassRunner.class)

 //加载文件的路径

@ContextConfiguration(locations = "classpath:spring-rabbitmq-producer.xml" )

public class RabbitmqProducer {

    //1 注入 RabbitTemplate

 @Autowired

    private RabbitTemplate rabbitTemplate;



    //2 发送消息

 @Test

    //简单模式

  public void helloWorld(){

        //队列名称,发送消息

  rabbitTemplate.convertAndSend( "spring_queue" , "hello world spring... " );

    }



    @Test

    //发送fanout消息 广播

  public void testFanout(){

        //交换机名称,路由键,发送消息

  rabbitTemplate.convertAndSend( "spring_fanout_exchange" , "" , "hello fanout... " );

    }



    @Test

    //发送topic消息 通配符

  public void testTopic(){

        //交换机名称,路由键,发送消息

  rabbitTemplate.convertAndSend( "spring_topic_exchange" , "weiyihe.yangyuting" , "hello topic... " );

    }

}

项目目录