SpringBoot28 RABBITMQ knowledge points, Docker download RABBITMQ, Springboot integration rabbtimq

Source: Internet
Author: User
Tags instance method message queue uuid rabbitmq docker run

1 RABBITMQ Knowledge Point 1.1 overall architecture diagram

Message producers post messages to Exchange, and Exchange routes producer-delivered messages to a queue in some sort of routing mechanism, and the message consumer gets messages from the queue for consumption .

1.2 Core Concepts 1.2.1 Server

Also known as broker, receiving client connections, implementing AMQP entity Services

1.2.2 Connection

Connection, application services with broker's network connection (PS: Similar to connection in JDBC)

1.2.3 Channel

Network channel, almost all operations in the channel, channel is to carry out the message read and write channels. The client can establish multiple channel, with each channel representing one session. "PS: statement equivalent to JDBC"

1.2.4 Message

Messages, the data passed between the server and the application are composed of properties and body, and properties can modify the message, such as the priority of the message, delay and other advanced features, the body is the content of the message.

1.2.5 Virtual Host

Virtual address, the topmost message route that is used for logical isolation. a There can be several exchange and queue in virtual host, the same virtual host cannot have Exchange or queue with the same name, the default is/, Virtual host is typically used for project partitioning, where a project-related exchange and queue are in one virtual host.

1.2.6 Exchange

A switch for receiving messages; forwarding a message to a bound queue based on a routing key

1.2.7 Binding

Virtual connection between Exchange and Queue, the Binding can contain routing key.

1.2.8 Routing Key

A routing rule that a virtual machine can use to determine how to route a specific message, which is the routing rule for Exchange and queue

1.2.9 Queue

Also called the message queue, messages queues, saving messages and forwarding them to consumers

1.3 The flow of RABBITMQ messages

Message publishers send a message, Exchange, routeing Key to Rabbtimq, they go through Virtual Host, then Exchange, to queue, and the message consumer gets the message in the queue.

2 Docker Download RABBIMQ 2.1 Docker Environment setup

See another blog post: Click to

The Docker version is:

2.2 Installing RABBITMQ 2.2.1 Pull RABBITMQ Mirror
Docker Pull Rabbitmq:3.7.7-management

Tips 01:RABBITMQ version can go to the official website to view

2.2.2 View the list of images pulled

2.2.3 Creating and starting the RABBITMQ container
Docker run-d--hostname my-rabbit-p 5672:5672-p 15672:15672 rabbitmq:3.7.7-management

The trick 01:-p is to map the port of the virtual machine to the port in Docker so that the port accessing the virtual machine is equivalent to accessing the port in Docker

Tip 02:5,672 is the port that connects the RABBTIMQ, and 15672 is the port that connects the RABBITMQ management page

2.2.4 Viewing the Boot RABBITMQ container

2.3 Connecting the RABBITMQ Management page

Tip 01: Access the virtual machine IP + RABBTIMQ Management page Port directly in the browser, for example:

http://192.168.233.135:15672/

Tip 02: You need to enter the user name and user password for the first visit, the default user name and user password are guest

Tip 03: The interface after successful access is as follows

3 Springboot Integration RABBITMQ Consumer Publisher 3.1 Create a Springboot project

Introducing dependencies: Web, AMQP, others are secondary dependencies

        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId> spring-boot-starter-web</artifactid>        </dependency>        <!--https://  MVNREPOSITORY.COM/ARTIFACT/ORG.SPRINGFRAMEWORK.BOOT/SPRING-BOOT-STARTER-AMQP-        <dependency>            <groupId>org.springframework.boot</groupId>            <ARTIFACTID>SPRING-BOOT-STARTER-AMQP </artifactId>        </dependency>
<?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.xunyji</groupId> <artifactId>rabbitmq01</artifactId> & Lt;version>0.0.1-snapshot</version> <packaging>jar</packaging> <name>rabbitmq01</ Name> <description>demo Project forSpring boot</description> <parent> <groupId>org.springframework.boot</groupId> &L T;artifactid>spring-boot-starter-parent</artifactid> <version>2.0.4.RELEASE</version> & Lt;relativepath/> <!--lookup parent from repository to </parent> <properties> <proj Ect.build.sourceencoding>utf-8</project.build.sourceencoding> <project.reporting.outputEncoding>    Utf-8</project.reporting.outputencoding> <java.version>1.8</java.version> </properties>            <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--https://MVNREPOSITORY.COM/ARTIFACT/ORG.SPRINGFRAMEWORK.BOOT/SPRING-BOOT-STARTER-AMQP --<dependency> <groupId>org.springframework.boot</groupId> <artifactid>spring- Boot-starter-amqp</artifactid> </dependency> <!--https://Mvnrepository.com/artifact/org.apache.commons/commons-lang3 --<dependency> <groupId>org.apache.commons</groupId> <artifactid>commons-lang3 </artifactId> </dependency> <!--https://Mvnrepository.com/artifact/commons-io/commons-io --<dependency> <groupId>commons-io</groupId> <artifactid>commons-io</artifa Ctid> <version>2.4</version> </dependency> <!--https://Mvnrepository.com/artifact/com.alibaba/fastjson --<dependency> <groupId>com.alibaba</groupId> &LT;ARTIFACTID&GT;FASTJSON&LT;/ARTIFAC Tid> <version>1.2.47</version> </dependency> <!--https://Mvnrepository.com/artifact/javax.servlet/javax.servlet-api --<dependency> <groupId>javax.servlet</groupId> <artifactid>javax.servlet-api&            lt;/artifactid> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactid>spring-boot-devtools</arti factid> <scope>runtime</scope> </dependency> <dependency> & Lt;groupid>org.projectlombok</groupid> <artifactId>lombok</artifactId> <opti Onal>true</optional> </dependency> <dependency> <groupid>org.springframework.boot& Lt;/groupid> <artifactId>spring-boot-starter-test</artifactId> <scope>test</ scope> </dependency> </dependencies> <build> <plugins> <plugi N> <groupId>org.springframework.boot</groupId> <artifactid>spring-boot- maven-plugin</artifactid> </plugin> </plugins> </build></project>
Pom.xml3.2 Configuration Files

# RABBITMQ Basic configuration spring.rabbitmq.addresses=192.168.233.135:5672spring.rabbitmq.username=  Guestspring.activemq.password=guestspring.rabbitmq.virtual-host=/spring.rabbitmq.connection -timeout=15000server.servlet.path=/server.port=8001spring.http.encoding.charset =utf-8spring.jackson.date-format=yyyy-mm-dd HH:mm:ssspring.jackson.time-zone=gmt+8  Spring.jackson. default-property-inclusion=non_null
application.properties3.3 Publishing messages

To rely on an instance of injection rabbittemplate and invoke an instance method Convertandsend publish the message

Tip 01: You need to set up a responsive exchange and queue in RABBITMQ before you publish

3.3.1 Adding Exchange in RABBITMQ

Tip 01: New Exchange information appears in the Exchange list when you are finished adding

3.3.2 Adding a queue in RABBITMQ

Tip 01: When you finish adding a queue, you will see the newly added queue in the queue list

3.3.3 Setting routing rules for Exchange and queue

Both the 01:exchange and the queue can be set, only one side is set.

3.4 Testing

Publish a message to RABBITMQ

 PackageCom.xunyji.rabbitmq01.producer;Importcom.xunyji.rabbitmq01.Rabbitmq01ApplicationTests;ImportCom.xunyji.rabbitmq01.entity.Order;Importlombok.extern.slf4j.Slf4j;Importorg.junit.Test;Importorg.springframework.beans.factory.annotation.Autowired;Importorg.springframework.stereotype.Component;ImportJava.util.UUID;Import Staticorg.junit.assert.*; @Component @slf4j Public classOrdersendertestextendsrabbitmq01applicationtests {@AutowiredPrivateOrdersender Ordersender; @Test Public voidTEST01 ()throwsException {Order order=Order.builder (). ID ("20180830"). Name ("Test Order 01"). MessageId (System.currenttimemillis ()+ "$" +Uuid.randomuuid (). toString ()). build ();    Ordersender.sendorder (order); }}
View Code

Tip 01: After a successful delivery, there will be a message in the queue that is consumed and will be removed from the queue after the message consumer has consumed it.

4 Springboot Integration RABBITMQ Consumer Subscribers 4.1 Create a Springboot project

Introducing the necessary dependencies: the Web, AMPQ, and the rest are secondary dependencies

        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId> spring-boot-starter-web</artifactid>        </dependency>        <!--https://  MVNREPOSITORY.COM/ARTIFACT/ORG.SPRINGFRAMEWORK.BOOT/SPRING-BOOT-STARTER-AMQP-        <dependency>            <groupId>org.springframework.boot</groupId>            <ARTIFACTID>SPRING-BOOT-STARTER-AMQP </artifactId>        </dependency>
<?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.xunyji</groupId> <artifactid>rabbitmq02-consumer</ artifactid> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>r Abbitmq02-consumer</name> <description>demo Project forSpring boot</description> <parent> <groupId>org.springframework.boot</groupId> &L T;artifactid>spring-boot-starter-parent</artifactid> <version>2.0.4.RELEASE</version> & Lt;relativepath/> <!--lookup parent from repository to </parent> <properties> <proj Ect.build.sourceencoding>utf-8</project.build.sourceencoding> <project.reporting.outputEncoding>    Utf-8</project.reporting.outputencoding> <java.version>1.8</java.version> </properties>            <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--https://MVNREPOSITORY.COM/ARTIFACT/ORG.SPRINGFRAMEWORK.BOOT/SPRING-BOOT-STARTER-AMQP --<dependency> <groupId>org.springframework.boot</groupId> <artifactid>spring- Boot-starter-amqp</artifactid> </dependency> <!--https://Mvnrepository.com/artifact/org.apache.commons/commons-lang3 --<dependency> <groupId>org.apache.commons</groupId> <artifactid>commons-lang3 </artifactId> </dependency> <!--https://Mvnrepository.com/artifact/commons-io/commons-io --<dependency> <groupId>commons-io</groupId> <artifactid>commons-io</artifa Ctid> <version>2.4</version> </dependency> <!--https://Mvnrepository.com/artifact/com.alibaba/fastjson --<dependency> <groupId>com.alibaba</groupId> &LT;ARTIFACTID&GT;FASTJSON&LT;/ARTIFAC Tid> <version>1.2.47</version> </dependency> <!--https://Mvnrepository.com/artifact/javax.servlet/javax.servlet-api --<dependency> <groupId>javax.servlet</groupId> <artifactid>javax.servlet-api&            lt;/artifactid> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactid>spring-boot-devtools</arti factid> <scope>runtime</scope> </dependency> <dependency> & Lt;groupid>org.projectlombok</groupid> <artifactId>lombok</artifactId> <opti Onal>true</optional> </dependency> <dependency> <groupid>org.springframework.boot& Lt;/groupid> <artifactId>spring-boot-starter-test</artifactId> <scope>test</ scope> </dependency> </dependencies> <build> <plugins> <plugi N> <groupId>org.springframework.boot</groupId> <artifactid>spring-boot- maven-plugin</artifactid> </plugin> </plugins> </build></project>
Pom.xml4.2 Configuration Files

#springboot整合mq的基本配置spring. Rabbitmq.addresses=192.168.233.135:5672Spring.rabbitmq.username=Guestspring.activemq.password=guestspring.rabbitmq.virtual-host=/spring.rabbitmq.connection-timeout=15000#springboot整合mq的消费配置spring. Rabbitmq.listener.simple.concurrency=5Spring.rabbitmq.listener.simple.max-concurrency=10Spring.rabbitmq.listener.simple.acknowledge-mode=Manualspring.rabbitmq.listener.simple.prefetch=1Server.servlet.path=/Server.port=8002Spring.http.encoding.charset=utf-8spring.jackson.date-format=yyyy-mm-DD HH:mm:ssspring.jackson.time-zone=gmt+8Spring.jackson.default-property-inclusion=non_null
View Code4.3 Writing of consumption methods

Use annotations on the consumption method to turn on the listener and specify the listener for that queue

Tip: @RabbitHandler and @RabbitListener annotations can automatically generate Exchange and queue bindings in RABBITMQ

4.4 Getting messages

As there is already a message in RABBITMQ to be processed, so the direct start of the project can complete the consumption of messages, after consumption of RABBITMQ in the number of messages to be consumed is 0

5 This blog source code

Click to go

    

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.