8 消息
rabbitmq的几种模式
- 简单模式,点对点
- 工作队列,一个生产者,多个消费者
- 订阅模式,中间增加exchange:多个消费者,都可以收到全部消息
- 直连,主题,header,扇形
- 路由模式,进队列和exchange绑定key,消息发送到key相同的队列
- topic模式,可以匹配多个主题的消息
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
1 直连模式
生产 this.amqpTemplate.convertAndSend(DirectConfig.DIRECT_QUEUE, goods);
消费 @RabbitListener(queues = DirectConfig.DIRECT_QUEUE)
2 扇形
绑定 BindingBuilder.bind(fanoutQueue1()).to(fanoutExchange());
往exchange发送消息
this.amqpTemplate.convertAndSend(FanoutConfig.FANOUT_EXCHANGE, "", goods );
接收 @RabbitListener(queues = FanoutConfig.FANOUT_QUEUE2)
public void receiveFanout2(Goods goods) {
log.info("receiveFanoutQueue2监听到消息:" + goods.toString());
}
3 topic模式
BindingBuilder.bind(topicQueue1()).to(topicExchange()).with("topic.messge");
接收
@RabbitListener(queues = TopicConfig.TOPIC_QUEUE2)
public void receiveTopic2(Goods goods) {
log.info("receiveTopic2收到消息:" + goods.toString());
}
发送
this.amqpTemplate.convertAndSend(TopicConfig.TOPIC_EXCHANGE, "topic.messge", goods1 );
kafka 使用spring-kafka比较简单
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
@KafkaListener(topics = "goods")
public void send(ConsumerRecord<?, ?> record) {
}
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
rocketmq
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>xxx</version>
</dependency>
# 发送消息
DefaultMQProducer producer = new DefaultMQProducer(producerGroup);
producer.setVipChannelEnabled(false);
producer.setNamesrvAddr(namesrvAddr);
producer.start();
producer.shutdown();
producer.send(message,new MessageQueueSelector() {
@Override
public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
Integer id = (Integer) arg;
int index = id % mqs.size();
return mqs.get(index);}},1);
消费
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroup);
consumer.setNamesrvAddr(namesrvAddr);
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
consumer.registerMessageListener((MessageListenerConcurrently) (list, context) -> {
}
consumer.start();
选择合适的队列: 稳定性,可靠性,性能几个角度考虑
9 搜索
solor
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
每次修改都需要commit
增 client.add(collectionName, solrInputDocument);
删 client.deleteById(collectionName,id); client.deleteByQuery(collectionName,"*:*");
查 SolrDocument document = client.getById(collectionName, id);
SolrQuery params = new SolrQuery();
es
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
# 索引操作
elasticsearchTemplate.createIndex(indexName);
deleteIndex
indexExists
getMapping
#单条记录
jpa的格式 extends ElasticsearchRepository<Article,Long>
articleRepository.save(article);
articleRepository.deleteById(id);
articleRepository.findById(id).get();
搜索
构建QueryBuilder matchQuery = QueryBuilders.multiMatchQuery(keyword, fieldNames).analyzer("ik_max_word");
10 小彩蛋
彩蛋
- banner设置banner.txt
lombok
- set,get,data
- NonNull,EqualsAandHashCode,Synchronized,log
发送邮件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
private JavaMailSender javaMailSender;
1 普通邮件
2 html邮件
3 附件
三器
- 过滤器:请求前进行过滤
- Filter接口:doFilter,init,destroy
- 拦截器:登录认证,日志,统一处理
- 接口HandlerInterceptor:preHandle,postHandle,afterCompletion
- 监听器:监听web对象的创建,销毁
- HttpSessionListener接口 sessionCreated,sessionDestroyed
事务acid,原子,一致,隔离,持久
- @Transactional spring注解
- 事务隔离级别:默认使用数据库,读未提交,读已提交,可重复读,串行
- 事务传播:事务隔离级别各类说明
- spring的其他属性
- value多种事务处理器
- 事务管理器
- 传播行为
- 事务隔离级别
- 超时时间
- readOnly
- rollbackFor指定异常
- noRollbackFor
@Transactional
- 不支持接口
- 方法必须public
统一异常处理
AOP
- 概念
- Aspect 切面,关注点的模块化
- join point 连接节点,方法调用
- Advice 通知
- Pointcut带有通知的连接点
- Target object 目标对象
- Aop proxy 代理
- spring支持的通知
- before
- after return
- after throw
- after advice
- around
validator验证
* NotNull,min,max,decimal,size,past,future, parttern,email,notempty
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
swagger
···
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
···
ApiDoc构建文档
11 打包部署
使用jenkis和docker即可
网友评论