Java并发编程之RabbitMQ的使用

520,希望每个人都能去珍惜身边的人,无论是爱人,还是亲人.....。

关于Java多线程,自己在前面记录了创建线程池的两种方式,线程池如何保证核心线程不被销毁,和生产者消费者模式(自己使用Condition和BlockingQueue)。

Java并发编程之线程池的使用(一)点击打开链接

Java并发编程之线程池的使用(二)点击打开链接

Java并发编程之线程池创建线程任务的过程  点击打开链接

Java并发编程之生产者消费者模式 点击打开链接

本来是想去记录锁,以及AQS的相关知识,但是感觉自己理解太过于肤浅,所以好好整理之后再来说明,今天来记录一下毕业设计中中RabbitMQ的使用,这里消息队列使用思路是来源于公司小店铺秒杀模块。

首先关于RabbitMQ的安装不在叙述了。

关于为什么使用消息队列:在实际的项目中,一个订单的完成首先需要前端调用下单的接口,然后将数据存入数据库,而一个下单的请求属于不需要同步返回结果的操作,所以消息队列适用于比较耗时而且不需要即时(同步)返回结果的操作作为消息放入消息队列。同时由于使用了消息队列,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦和。

这里我的毕业设计中使用Eureka作为注册中心,(⊙v⊙)嗯,为什么不用Zookeeper,因为Zookeeper还需要部署,Eureka就不需要,pom文件引入依赖即可,这是我选择的根本原因。分布式服务的CAP原理我想很多人都有所了解, CAP三者只能取其二,不可兼得,而Eureka是AP原则:高可用和分区容错。Zookeeper是占用CP原则:强一致性(基于Zab协议)和分区容错。(其实就自己而言,目前我还没有机会去了解到真正项目中强一致性和高可用是怎么一回事,即使在自己项目部署的服务器中,往往都是模拟各种情况,对这些理论没有真正意义上的接触,就比如设计模式,自己知道的很多,但是只有单例模式自己用的最熟悉,其他的都是停留在理论上)

好!开始自己毕业设计文章模块使用技术的介绍:

先看一下文章模块的项目目录

Java并发编程之RabbitMQ的使用_第1张图片

这里article是是服务注册方和RabbitMQ中生产者,Eureka是注册中心,feign算是暴露的api接口,util是自己写的基本的类(达成jar放入到其他项目中,省的每次去写很多类),customer就是RabbitMQ中的消费者。下面

首先是Spring Cloud配置Eureka注册中心:

引入依赖:



	4.0.0

	com.server
	eureka
	0.0.1-SNAPSHOT
	jar

	eureka
	Demo project for Spring Boot

	
		org.springframework.boot
		spring-boot-starter-parent
		2.0.2.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
		Finchley.BUILD-SNAPSHOT
	

	
		
			org.springframework.cloud
			spring-cloud-starter-netflix-eureka-server
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	

	
		
			spring-snapshots
			Spring Snapshots
			https://repo.spring.io/snapshot
			
				true
			
		
		
			spring-milestones
			Spring Milestones
			https://repo.spring.io/milestone
			
				false
			
		
	


配置文件

server.port=9998
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone= http://localhost:9998/eureka/

然后就是在启动类上加入Eureka服务注解

Java并发编程之RabbitMQ的使用_第2张图片

效果:

然后是生产者也是服务注册者的pom文件:



	4.0.0

	com.client
	article
	0.0.1-SNAPSHOT
	jar

	article
	Demo project for Spring Boot

	
		org.springframework.boot
		spring-boot-starter-parent
		2.0.2.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
		Finchley.BUILD-SNAPSHOT
	

	
		
			org.springframework.cloud
			spring-cloud-starter-netflix-eureka-server
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
		
			com.alibaba
			fastjson
			1.2.46
		
		
			org.springframework.boot
			spring-boot-starter-amqp
		
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
			
				org.springframework.boot
				spring-boot-maven-plugin
				
					true
				
			
		
	

	
		
			spring-snapshots
			Spring Snapshots
			https://repo.spring.io/snapshot
			
				true
			
		
		
			spring-milestones
			Spring Milestones
			https://repo.spring.io/milestone
			
				false
			
		
	



#eurka
eureka.client.service-url.defaultZone = http://localhost:9998/eureka/
server.port=8082
spring.application.name=article
#RabbitMQ
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672

启动类中加上@EnableEurekaClient注解就配置好第一个服务的注册方。那么如何配置生产者

在生产者无需配置太多东西,直接用就好

Java并发编程之RabbitMQ的使用_第3张图片

topicExchange是在消费者方定义的交换器名称,queue.A是指定队列的名称,放入队列的是String类型(感觉序列化来序列化去很麻烦就直接这样做了)AmqpTemplate定义了发送和接收消息的基本操作,百度百科:AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有 RabbitMQ等。

消费者的配置:



	4.0.0

	com.design
	customer
	0.0.1-SNAPSHOT
	jar

	customer
	Demo project for Spring Boot

	
		org.springframework.boot
		spring-boot-starter-parent
		2.0.2.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
	

	
		
			org.springframework.boot
			spring-boot-starter
		
		
			com.alibaba
			fastjson
			1.2.46
		
		
			org.springframework.boot
			spring-boot-starter-amqp
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
		
			org.mybatis.spring.boot
			mybatis-spring-boot-starter
			1.3.1
		
		
			mysql
			mysql-connector-java
		
		
			com.alibaba
			druid
			1.0.29
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	



 

Java并发编程之RabbitMQ的使用_第4张图片 这里介绍一篇文章,是自己学习RabbitMQ过程中觉得挺好的

点击打开链接

这里自己使用消费者手动确认消息被消费,也就是ack,类似于http请求的三次握手,为了保证消息被消费掉。

Java并发编程之RabbitMQ的使用_第5张图片

这里就是成功消费一条发表文章的模块。

更多文章请关注公众号:每天学Java。想获得更多最新面试提醒请进入小程序:每天学Java

 公众号二维码:                                                                                          小程序二维码:

                       

你可能感兴趣的:(多线程)