• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Springboot RabbitMq 整合使用 队列

武飞扬头像
IT凝冬
帮助1

Springboot RabbitMq整合使用 简单队列

本项目主要有两个服务,分别是是consumer和producer。

consumer服务

全部依赖

        <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>com.谷歌.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.1.37</version>
        </dependency>
学新通

配置文件

server:
  port: 8081
spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest #用户名
    password: guest  #密码
    virtual-host: 

实体

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; 
import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
    // 名字
    private String name;
    // 年龄
    private Integer age;
    // 性别
    private String sex; 
} 
学新通

接收者

import com.alibaba.fastjson.JSON;
import com.lideru.consumer.pojo.User; 
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener; 
import org.springframework.stereotype.Component; 
import java.util.Date;
@Component
@RabbitListener(queues = "HelloWorld")
public class HelloWorldReceiver {


    @RabbitHandler
    public void process(String user ) {
        
        System.out.println( new Date()  " 接收 : "   user );
    }
}
学新通

配置类

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; 
@Configuration
public class RabbitHelloWorldConfig { 
    /**
     * Queue 可以有4个参数
     *      1.name          队列名
     *      2.durable       持久化消息队列 ,rabbitmq重启的时候不需要创建新的队列 默认true
     *      3.auto-delete   表示消息队列没有在使用时将被自动删除 默认是false
     *      4.exclusive     表示该消息队列是否只在当前connection生效,默认是false
     */
    @Bean
    public Queue createHelloWorldQueue() { 
        return new Queue("HelloWorld",true);
    } 
}
学新通

producer服务

全部依赖

		<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>com.谷歌.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.1.37</version>
        </dependency>
学新通

配置文件

server:
  port: 8080
spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest #用户名
    password: guest  #密码
    virtual-host:

实体

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; 
import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
    // 名字
    private String name;
    // 年龄
    private Integer age;
    // 性别
    private String sex; 
} 
学新通

发送者

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.Component;

import java.util.Date;
import java.util.UUID; 
@Component
public class HelloWorldSender { 
	@Autowired
	private RabbitTemplate rabbitTemplate;

	public void send() {
		CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
		String content = "HelloWorld = "   new Date()   ", content = "   UUID.randomUUID().toString();
		this.rabbitTemplate.convertAndSend("HelloWorld",(Object) content,correlationData);
		System.out.println("发送成功," new Date() "," content);
	}  
}
学新通

测试

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping
public class HelloWorldTestController {
    @Autowired
    private HelloWorldSender helloWorldSender; 
    @GetMapping("/helloWorld")
    public String hello() throws InterruptedException {
        helloWorldSender.send();
        return "Hello!";
    }
}
学新通

服请求 http://localhost:8080/helloWorld
producer控制台

Fri Feb 10 16:02:42 CST 2023发送成功,User(name=HelloWorld, age=18, sex=man)

consumer控制台

Fri Feb 10 16:02:42 CST 2023 接收 : User(name=HelloWorld, age=18, sex=man)

到这里就实现了,简简单单。


我们先关闭consumer服务,在请求http://localhost:8080/helloWorld,然后再启动consumer服务。结果如下
producer控制台

Fri Feb 10 16:04:14 CST 2023发送成功,User(name=HelloWorld, age=18, sex=man)

consumer控制台

Fri Feb 10 16:04:22 CST 2023 接收 : User(name=HelloWorld, age=18, sex=man)

即使服务挂了,队列还在,等服务再启动起了时就自动跑队列里面的东西咯。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgifjfh
系列文章
更多 icon
同类精品
更多 icon
继续加载