美文网首页
springboot读书笔记之基础使用(二)

springboot读书笔记之基础使用(二)

作者: 轻舞凋零 | 来源:发表于2022-06-01 00:14 被阅读0次

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即可

相关文章

网友评论

      本文标题:springboot读书笔记之基础使用(二)

      本文链接:https://www.haomeiwen.com/subject/sbxzprtx.html