# JavaLearn **Repository Path**: lww9464/JavaLearn ## Basic Information - **Project Name**: JavaLearn - **Description**: No description available - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-08-24 - **Last Updated**: 2021-08-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JavaLearn #### 介绍 Java各个知识点学习Demo,每个知识点对应一个Module 1.RabbitMQ 2.SpringAMQP 3.FastDFS 4. #### 提交日志细节记录 1. 【1.本地初始化】 1)IDEA中使用 Spring Initializr 创建一个SpringBoot项目 2)使用git clone gitee版本库中新建的repository项目到本地,加入clone下来的内容到新建的SpringBoot项目中,整合后删除一些不需要的文件后,做本地初始化提交 3)我把IDEA生成的.gitignore和gitee中clone下来的.gitignore合并到一起 2. 【2.RabbitMQ-demo-简单队列】 1)代码里有一个消息生成者类Send和消息消费者类Recv,代码里要设置连接rabbitmq的内容,如登录名、密码等 2)simple文件夹里就是简单队列 3. 【3.RabbitMQ-demo-工作队列(轮询)】 1)在work/rr文件夹下 2)工作队列(轮询)解决的问题:生产者的生产能力远远大于消费者的消费能力的时候,我们加多几个消费者 3)轮询有缺点 4. 【4.RabbitMQ-demo-工作队列(公平)】 1)在work/fair文件夹下 2)在接受者中加个限流的代码即可,做到能者多劳,处理完成才能消费下一条消息 3)模拟消费耗时Rece01是1秒,Rece02是2秒 5. 【5.RabbitMQ-demo-发布-订阅队列】 1)现在就是要定义交换机了 2)消息发给交换机,由交换机转发到绑定的队列,消费者从绑定的队列中取 6. 【6.RabbitMQ-demo-路由队列】 1)把原来的exchanges包名修改为了fanout,因为是通过交换机来命名 2)包名是fanout为发布/订阅队列,包名是direct为路由队列 3)加了路由key,通过路由key去绑定不同的队列,然后发消息的时候要携带这个路由key,根据这个路由key去交换机找到它所绑定的队列,然后才把消息发到这个队列 4)不指定交换,默认走的是(AMQP default) 交换机,Type是direct,在rabbitmq管理界面的Exchanges选项卡中 5)路由队列的缺点:当项目越来越庞大,使用的路由key越来越多的时候,不容易去管理 7. 【7.RabbitMQ-demo-主题队列(工作中最常用)】 1)加通配符 * 或 #,*只能匹配一个,#可以匹配0个或多个,模糊匹配管理,尽量减少路由key的编写 2)发送消息是详细的路由key,绑定的时候才是通配符,根据详细的路由key去通配符里匹配,匹配到就发送,匹配不到就丢弃 3)为什么说在工作中常用这个模式,因为通过这个模式可以实现其他的几种模式 8. 【8.RabbitMQ-demo-RPC队列(很少用到)】 1)直接从文档copy代码了 2)测试时,先启动 RPCServer,不然会报错 3)了解RabbitMQ官网RPC模式队列的图就行了 9. 【9.更新readme】 10. 【10.RabbitMQ-demo-事物】 1)使用channel.txSelect();开启事物,使用channel.txCommit();提交事物 2)一般很少去使用事物,因为使用了事物就会降低RabbitMQ的性能 11. 【11.RabbitMQ-demo-同步确认模式】 1)同步确认模式有缺点,所以我们一般都是用下面讲到的异步确认模式 12. 【12.RabbitMQ-demo-异步确认模式】 1)什么叫异步:你发消息,我这边等确认,确认的同时,我任然能发消息,然后这个时候队列确认消息的时候返回,返回的时候我的生成者有一个回调的方法,能够收到你返回的消息进行相应的处理 2)特别要注意异步的编程还是比较复杂的 3)异步确认模式最重要的就是 监听回调 13. 【13.SpringAMQP-demo-Spring AMQP】 1)spring AMQP说白了也就是spring对AMQP模板的封装,在官网 https://spring.io/projects/spring-amqp 可以查看 2)新建springampq-demo的Module 3)然后再新建两个Module,一个是消息的生产者amqp-send,一个是消息的消费者amqp-recv 4)然后配置pom.xml文件,包括父工程的指定,子工程的指定,不过子工程一般会在新建时自动指定 5)创建两个Module,amqp-send 和 amqp-recv,并配置pom.xml和application.yml文件后,前期的搭建就算完成了 6)RabbitMQ需要一个交换机,一个队列,还有交换机和队列做绑定 7)Queue类导入的是import org.springframework.amqp.core.Queue; 8)在测试类中发送消息测试,测试类需要在类上加注解@SpringBootTest,在方法上加注解@Test 9)通过 RabbitTemplate 发送消息 10)总结(主要三点):1.通过配置类RabbitMQConfig配置队列、交换机、绑定,绑定的时候带上路由key; 2.正常发消息是通过RabbitTemplate的convertAndSend()方法带上交换机和路由key和还有消息发送消息; 3.监听者只需要准备两个注解@RabbitListener和@RabbitHandler 14. 【14.fastdfs-demo-Demo环境初始化】 1)这里存在一个FastDFS依赖导入不成功的问题,解决办法 http://www.qishunwang.net/knowledge_show_129043.aspx 2)新建fdfs_client.conf文件,用来初始化;其中tracker的ip要改为你的tracker服务ip 3)新建一个文件上传对象类 FastDFSFile 类 4)新建一个工具类FastDFSClient,用来生成Tracker服务器端、生成Storage客户端、上传文件、下载文件等 15. 【15.fastdfs-demo-FastDFS文件工具类】 1)工具类体提供的方法有:上传文件、下载文件、删除文件、查看文件信息、获取文件路径 16. 【16.fastdfs-demo-文件上传】 1)正常情况下是service层调用我们工具类里的上传等方法,然后controller再去调用service层,但我们这里只是演示,就只有controller层了 2)Controller层中重定向的写法 return "redirect:uploadStatus"; 后面 uploadStatus是Controller方法的请求的路径 3)这里有两个页面:upload.html、uploadStatus.html 4)注意上传的文件大小需要配置,如果文件过大就上传不成功了 5)文件上传测试成功 17. 【】 1)