A simple RabbitMQ example (java version)

Configuration file
application.yml

demo:
  rabbit:
    address: 192.168.0.188:5672
    virtual-host: /demo
    username: demo
    password: "123456"
server:
  port: 1852
  servlet:
    context-path: /rmq

pom.xml file

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.tricky.demo</groupId>
    <artifactId>rabbit-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>rabbit-demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.5.7</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

RabbitMQ configuration initialization

package com.tricky.demo.rabbit.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * mq配置
 *
 * @Autor Shadow 2020/10/23
 * @Date 2020-10-23 14:12:19
 */
@Configuration
public class RabbitMQConfiguration {
    
    

	@Value("${demo.rabbit.address}")
	private String rabbitAddress;

	@Value("${demo.rabbit.username}")
	private String username;

	@Value("${demo.rabbit.password}")
	private String password;

	@Value("${demo.rabbit.virtual-host}")
	private String virtualHost;

	//相当于<Bean id="connectionFactory"></Bean>
	@Bean
	public ConnectionFactory connectionFactory() {
    
    
		CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
		connectionFactory.setAddresses(rabbitAddress);
		connectionFactory.setUsername(username);
		connectionFactory.setPassword(password);
		connectionFactory.setVirtualHost(virtualHost);
		return connectionFactory;
	}

	//形参名称要与bean的方法名保持一致
	@Bean
	public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
    
    
		RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
		rabbitAdmin.setAutoStartup(true);
		return rabbitAdmin;
	}

	@Bean
	public TopicExchange demoExchange() {
    
    
		return new TopicExchange(EnumRabbitQueue.Demo.getExchange(), true, false);
	}

	@Bean
	public Queue demoQueue() {
    
    
		return new Queue(EnumRabbitQueue.Demo.getName(), true); //队列持久
	}

	@Bean
	public Binding demoBinding() {
    
    
		return BindingBuilder.bind(demoQueue()).to(demoExchange()).with(EnumRabbitQueue.Demo.getRouteKey());
	}


	@Bean
	public TopicExchange zmmExchange() {
    
    
		return new TopicExchange(EnumRabbitQueue.Zmm.getExchange(), true, false);
	}

	@Bean
	public Queue zmmQueue() {
    
    
		return new Queue(EnumRabbitQueue.Zmm.getName(), true); //队列持久
	}

	@Bean
	public Binding zmmBinding() {
    
    
		return BindingBuilder.bind(zmmQueue()).to(zmmExchange()).with(EnumRabbitQueue.Zmm.getRouteKey());
	}


}

package com.tricky.demo.rabbit.config;

/**
 * mq-queue-name
 *
 * @Autor Shadow 2020/10/23
 * @Date 2020-10-23 14:55:36
 */
public enum EnumRabbitQueue {
    
    
	None("ex_none", "na_none", "key_none"),
	Demo("ex_demo", "na_demo", "key_demo"),
	Zmm("ex_zmm", "na_zmm", "key_zmm"),
	//
	;

	private final String exchange;
	private final String name;
	private final String routeKey;

	public String getExchange() {
    
    
		return exchange;
	}

	public String getName() {
    
    
		return name;
	}

	public String getRouteKey() {
    
    
		return routeKey;
	}

	EnumRabbitQueue(String exchange, String name, String routeKey) {
    
    
		this.exchange = exchange;
		this.name = name;
		this.routeKey = routeKey;
	}
}


Producer generates ActiveMQ message

package com.tricky.demo.rabbit.service;

import com.tricky.demo.rabbit.config.EnumRabbitQueue;
import com.tricky.demo.rabbit.msg.DemoDataMsg;
import com.tricky.demo.rabbit.msg.DemoNumberMsg;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 测试
 *
 * @Autor Shadow 2020/10/23
 * @Date 2020-10-23 14:36:50
 */
@Service
public class TestRabbitService {
    
    
	private static Logger logger = LoggerFactory.getLogger(TestRabbitService.class);

	@Autowired
	private AmqpTemplate amqpTemplate;

	/**
	 * 发送一个test消息
	 *
	 * @param dt
	 */
	public void sendData(String dt) {
    
    
		DemoDataMsg msg = new DemoDataMsg();
		msg.setData(dt);
		amqpTemplate.convertAndSend(EnumRabbitQueue.Demo.getExchange(), EnumRabbitQueue.Demo.getRouteKey(), msg, (message) -> message);
	}


	/**
	 * 发送一个test消息
	 *
	 * @param dt
	 */
	public void sendNumber(String dt) {
    
    
		DemoNumberMsg msg = new DemoNumberMsg();
		msg.setNumber(Long.parseLong(dt));
		amqpTemplate.convertAndSend(EnumRabbitQueue.Demo.getExchange(), EnumRabbitQueue.Demo.getRouteKey(), msg, (message) -> message);
	}
}


Consumption of RabbitMQ data

package com.tricky.demo.rabbit.handler;

import cn.hutool.json.JSONUtil;
import com.tricky.demo.rabbit.msg.DemoDataMsg;
import com.tricky.demo.rabbit.msg.DemoNumberMsg;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * handler
 *
 * @Autor Shadow 2020/10/23
 * @Date 2020-10-23 15:11:33
 */
@Component
@RabbitListener(queues = "na_demo")
public class DemoMessageHandler {
    
    
	private static Logger logger = LoggerFactory.getLogger(DemoMessageHandler.class);


	@RabbitHandler
	public void handle(String data) {
    
    
		logger.info(String.format("收到的消息为:%s", data));
	}


	@RabbitHandler
	public void handle(DemoDataMsg data) {
    
    
		logger.info(String.format("收到的消息为:%s %s", data.getClass().getName(), JSONUtil.toJsonStr(data)));
	}

	@RabbitHandler
	public void handle(DemoNumberMsg data) {
    
    
		logger.info(String.format("收到的消息为:%s %s", data.getClass().getName(), JSONUtil.toJsonStr(data)));
	}
}


Running example:
open http://localhost:1852/rmq
Insert picture description here

Insert picture description here


Source code:

Link: https://pan.baidu.com/s/1WjEMq8UjjKiK8cswmmeixg
Extraction code: abcd
copy this content and open the Baidu Netdisk mobile App, the operation is more convenient-from the sharing of Baidu Netdisk Super Member V4

Guess you like

Origin blog.csdn.net/sail331x/article/details/109243619