关闭

SPRING BOOT+ELASTICSEARCH+RABBITMQ

257人阅读 评论(0) 收藏 举报
分类:
  • 直接进入正题 构思的流程图:
Created with Raphaël 2.1.0请求用户身份验证数据库操作AOPRABBITMQ搜索项目操作返回ACK返回结果集

. 安装RABBITMQ

echo 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list

wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -

sudo apt-get update

sudo apt-get install rabbitmq-server

sudo rabbitmqctl add_user admin admin 

sudo rabbitmqctl set_user_tags admin administrator

sudo rabbitmq-plugins enable rabbitmq_management

http://192.168.10.69:15672

. 安装elasticSearch

注:spring-boot-starter-data-elasticsearch不支持高版本es
采用2.4.4版本~ 另外es自身不带可视化页面,需要安装head~
https://www.elastic.co/products/elasticsearch download deb

dpkg -i elasticsearch-2.4.4.deb

/etc/init.d/elasticsearch start 

head:
cd elasticsearch-2.4.4/bin/plugin

/usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head

http://192.168.10.69:9200/_plugin/head/

. 最繁琐的部署环节已经完成 踩了无数个坑 心累~
接下来首先在主项目配置rabbit provider

amqp-client-3.5.4.jar
spring-amqp-1.5.6.RELEASE.jar
<!-- mq start -->
<!-- connection -->
<rabbit:connection-factory id="connectionFactory"
        host="${mq.host}" username="${mq.username}" password="${mq.password}"
        port="${mq.port}" virtual-host="${mq.vhost}" />

<rabbit:admin connection-factory="connectionFactory" id="amqpAdmin" />

<!-- json convert -->
<bean id="jsonMessageConverter"
        class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" />

<!-- es queue -->
<rabbit:queue id="es_queue" name="es_queue" durable="true"
        auto-delete="false" exclusive="false" />

<!-- exchange -->
<rabbit:direct-exchange name="es_exchange" id="es_exchange"
        durable="true" auto-delete="false">
        <rabbit:bindings>
            <rabbit:binding queue="es_queue" key="es_queue" />
        </rabbit:bindings>
</rabbit:direct-exchange>

<!-- template -->
<rabbit:template id="amqpTemplate" exchange="es_exchange"
        connection-factory="connectionFactory" message-converter="jsonMessageConverter"/>
<!-- mq end -->
@Service
public class EsMqServiceImpl implements EsMqService {

    @Autowired
    private AmqpTemplate amqpTemplate;

    @Override
    public void pushToMessageQueue(String exchange, String route, String message) {
        amqpTemplate.convertAndSend(exchange, route, message);
    }
}
rabbitmq还是值得一学的,稍微看了下《RabbitMQ实战 高效部署分布式消息队列》,看到第四章实在看不下去了,有点涩,又缺乏实战的机会。但感觉基本概念理解了,平时操作也够用了。

. 搜索项目搭建

这里使用SPRING-BOOT代替SPRING 2个原因:
1.SPRING-BOOT实在是方便
2.是因为自己想实战下

新建方法: 
1.STS插件
2.http://projects.spring.io/spring-boot/ 

.pom

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency> 

        <!-- ES -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

        <!-- RabbitMQ -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

.application.properties

spring.application.name=elasticsearch

#mq
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.virtual-host=panchen
spring.rabbitmq.username=panchen
spring.rabbitmq.password=panchen

#es
spring.data.elasticsearch.cluster-nodes=localhost:9300
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.repositories.enabled=true  

.entity

/**
 * @Field :FieldType type() default FieldType.Auto;#自动检测属性的类型 FieldIndex index()
 *        default FieldIndex.analyzed;#默认情况下分词 DateFormat format() default
 *        DateFormat.none; String pattern() default ""; boolean store() default
 *        false;#默认情况下不存储原文 String searchAnalyzer() default "";#指定字段搜索时使用的分词器
 *        String indexAnalyzer() default "";#指定字段建立索引时指定的分词器 String[]
 *        ignoreFields() default {};#如果某个字段需要被忽略 boolean includeInParent()
 *        default false; 不加则默认值
 * @Document: 索引库命名 / 类型 / 分区数 / 每个分区的备份数 / 刷新间隔 / 文件存储类型
 */

@Document(indexName = "userinfo_index", type = "userInfo", shards = 5, replicas = 1, refreshInterval = "-1", indexStoreType = "fs")
public class UserInfo implements Serializable {

    private static final long serialVersionUID = 551589397625941750L;

    @Id
    private Long id;

    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static long getSerialversionuid() {
        return serialVersionUID;
    }

    @Override
    public String toString() {
        return "UserInfo [id=" + id + ", name=" + name + "]";
    }

}

.repository ~~ dao

/**
 * 接口中自定义方法,在方法名中包含T中字段名 查询关键字包括find…By, read…By, query…By, count…By, and
 * get…By,And and Or连接 泛型的参数分别是实体类型和主键类型
 * 
 * @author pc
 */

public interface UserInfoRepository extends ElasticsearchRepository<UserInfo, Long> {
}

. test

@SpringBootApplication
//这个注解是个大坑!!!
@EnableElasticsearchRepositories
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = CompanyElasticsearchApplication.class)
public class SearchRepositoryTest {

    @Autowired
    // spring Boot默认会扫描启动类同包以及子包下的注解
    private UserInfoRepository userInfoRepository;

    @Test
    public void test() {
        System.out.println("start");
        UserInfo userInfo=new UserInfo();
        userInfo.setId(1l);
        userInfo.setName("潘晨");
        System.out.println(userInfoRepository.save(userInfo));
        System.out.println("新增成功");
        System.out.println(userInfoRepository.count());
        System.out.println("查询成功");
        System.out.println("end");
    }
}

. OK!

1
0
查看评论

RabbitMQ--02--RabbitMQ传递对象

www.rabbitmq.com官网上有RabbitMQdemo:hello world 这里要说的是传递的是一个对象,其实和与hello world类似,只不过 增加了一个对象序列化: 序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。序列化分为两大部分:序列化和反序...
  • BtWangZhi
  • BtWangZhi
  • 2017-02-12 14:38
  • 3403

SpringBoot的RabbitMQ消息队列: 三、第二模式"Work queues"

上一节的两个工程,一个负责发送,一个负责接收,也就是一一对于的关系。      只要消息发出了,接收者就处理;当接收效率较低时,就会出现接收者处理不过来,我们就可能会处理不过来,于是我们就可能多配置接受者。这个模式就是"Work queues&quo...
  • lxhjh
  • lxhjh
  • 2017-04-04 02:05
  • 3171

spring boot实战(第十二篇)整合RabbitMQ

前言 本篇主要讲述Spring Boot与RabbitMQ的整合,内容非常简单,纯API的调用操作。  消息生产者 不论是创建消息消费者或生产者都需要ConnectionFactory ConnectionFactory配置 创建AmqpConfig文件AmqpConfig.j...
  • liaokailin
  • liaokailin
  • 2015-11-01 16:44
  • 58721

spring boot实战(第十四篇)整合RabbitMQ源码分析前言

前言 本篇开始讲述Spring Boot如何整合RabbitMQ(实际上Spring就整合了RabbitMQ)。 RabbitAdmin 在上篇中遗留AmqpAdmin没有讲解,现在来看下该部分代码 public AmqpAdmin amqpAdmin(CachingConnectionF...
  • liaokailin
  • liaokailin
  • 2015-11-01 21:39
  • 8541

rabbitMq集成Spring后,消费者设置手动ack,并且在业务上控制是否ack

rabbitMq集成Spring后,消费者设置手动ack,并且在业务上控制是否ack
  • u010841296
  • u010841296
  • 2016-08-19 19:49
  • 13071

springboot(八):RabbitMQ详解

RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。 消息中间件在互联网公司的使用中越来越多,刚才还看到新闻阿里将RocketMQ捐献给了apache,当然了今天的主角还是讲RabbitMQ。消息中间件最主要的作用是解耦,中间件最标准的用...
  • gebitan505
  • gebitan505
  • 2017-02-08 17:45
  • 4390

springboot实现rabbitmq

最近学习springboot,想给项目添加rabbitmq进行实现,所以按照spring xml之前的文件重新配置了一边,毕竟springboot提倡代码优于配置。安装好rabbitmq后访问http://localhost:15672 用默认的账户:guest和密码:guest即可以登录 1.本...
  • xr568897472
  • xr568897472
  • 2017-09-01 16:30
  • 949

Spring Boot RabbitMQ快速入门 (2)

Spring Boot RabbitMQ快速入门 (2)Prefetch设置当我们进入RabbitMQ的GUI管理界面, 点入某个队列查看消费者的属性时, 有记录如下 Channel Consumer tag Ack required Exclusive Prefetch cou...
  • Solarison
  • Solarison
  • 2017-03-05 16:30
  • 2286

spring-boot 集成 rabbitmq

之前说了集成activemq,那就再说说集成另一个很火的mq,兔子。 本文示例主要参看官方的demo https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample...
  • zl18310999566
  • zl18310999566
  • 2017-01-11 14:03
  • 8816

spring boot实战(第十一篇)初识RabbitMQ

前言 最近几篇文章将围绕消息中间件RabbitMQ展开,对于RabbitMQ基本概念这里不阐述,主要讲解RabbitMQ的基本用法、Java客户端API介绍、Spring Boot与RabbitMQ整合、 Spring Boot与RabbitMQ整合源码分析。 RabbitMQ安装 在使用消息...
  • liaokailin
  • liaokailin
  • 2015-11-01 15:31
  • 11795
    个人资料
    • 访问:2604次
    • 积分:114
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:2篇
    • 译文:0篇
    • 评论:1条
    文章分类