Spring Boot集成RabbitMQ

SpringBoot workingTime 1057℃ 0评论

Ubuntu 中安装 RabbitMQ

首先查看自己数据源,如果不是国内的源,有可能安装不上。Ubuntu数据源切换教程点这里

RabbitMQ安装执行以下命令:

// 输入以下命令进行安装
apt-get install rabbitmq-server

// 安装RabbitMQ监控管理插件进行RabbitMQ的管理 
sudo rabbitmq-plugins enable rabbitmq_management

// 查看安装的插件 
sudo rabbitmqctl list_users

// 查看用户 
sudo rabbitmqctl list_users

// 新增管理员用户 admin 密码也是 admin
sudo rabbitmqctl add_user admin admin 
sudo rabbitmqctl set_user_tags admin administrator

// 同时为用户设置读写等权限(如果不设置,项目会出现连接错误)
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

现在可以用浏览器访问:http://IP地址:15672

出现登录界面,现在使用我们刚才创建的admin账户登录。

登录成功后的界面上图。

与spring boot集成

创建一个maven项目,在pom.xm加入如下内容:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!-- jdk版本号,Angel在这里使用1.8,大家修改为大家本地配置的jdk版本号即可 -->
    <java.version>1.8</java.version>
</properties>
    
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.10.RELEASE</version>
</parent>

<dependencies>
    <!-- spring boot web支持:mvc,aop... -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

application.properties配置内容如下


spring.application.name=spring-boot-rabbitmq

spring.rabbitmq.host=192.168.98.75
#是的,你没有看错, 访问管理页面的时候端口是15672,但是在集成是端口是5672
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin

Application.java启动类代码:


import org.springframework.amqp.core.Queue;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

/**
 * @author : R&M www.rmworking.com/blog
 *         2018/4/9 10:47
 *         spring-boot-demo
 *         org.springcore
 */
@SpringBootApplication
public class Application {

    /**
     * 队列初始化,durable是否选择持久化数据,true持久化
     * @return
     */
    @Bean
    public Queue fooQueue() {
        return new Queue("foo");
    }

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

}

消息发送者类HelloSender.java



import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * @author : R&M www.rmworking.com/blog
 *         2018/6/4 15:44
 *         spring-boot-demo
 *         org.rabbitmq.controller
 */
@Service
public class HelloSender {

    @Autowired
    private AmqpTemplate rabbitTemplate;

    public void send() {
        String context = "hello " + new Date();
        System.out.println("Sender : " + context);
        this.rabbitTemplate.convertAndSend("foo", context);
    }
}

消息接受者HelloReceiver.java


import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * @author : R&M www.rmworking.com/blog
 *         2018/6/4 16:57
 *         spring-boot-demo
 *         org.rabbitmq.service
 */
@Component
@RabbitListener(queues="foo")
public class HelloReceiver {

    //接收到消息处理.
    @RabbitHandler
    public void onMessage(@Payload String foo){
        System.out.println(" >>> "+new Date() + ": " + foo);
    }

}

接下来我们写一个单元测试,测试一下生产和消费是否成功:


import org.junit.Test;
import org.junit.runner.RunWith;
import org.rabbitmq.Application;
import org.rabbitmq.service.HelloSender;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;

/**
 * @author : R&M www.rmworking.com/blog
 *         2018/6/4 15:45
 *         spring-boot-demo
 *         org.rabbitmq.controller
 */
// 这是JUnit的注解,通过这个注解让SpringJUnit4ClassRunner这个类提供Spring测试上下文。
@RunWith(SpringJUnit4ClassRunner.class)
// 这是Spring Boot注解,为了进行集成测试,需要通过这个注解加载和配置Spring应用上下
@SpringBootTest(classes = Application.class)
@WebAppConfiguration
public class RabbitMqHelloTest {

    @Autowired
    private HelloSender helloSender;


    @Test
    public void hello() throws Exception {
        helloSender.send();
    }

}

执行单元测试,测试可以看到控制台输出:

上面红框是生产了一条数据,下面是消费。然后我们看一下管理界面

成功完成集成~!!!

转载请注明:R&M » Spring Boot集成RabbitMQ

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

备案号:京ICP备14044161号;联系我:rm@rmworking.com