ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringBoot整合篇durid,dubbo,j2cache,kafka

2018-09-14 12:03:24  阅读:224  来源: 互联网

标签:


SpringBoot整合篇durid,dubbo,j2cache,kafka

启动时redis中没有缓存

纯属于练手调通,redis,zookeeper,kafka的安装就不再这里说了

不足之处,还请斧正,后续使用肯定进行更深入封装。

主工程:打印

Dubbo服务端:打印

第二次有缓存

主工程:打印

 

Dubbo服务端:打印

 

 

 

 

 

主工程

为方便区分,第一次缓存为空时调用dubbo服务,然后设置缓存,第二次调用直接取缓存不调用dubbo服务,两次都会发送消息到队列。

package com.example.demo.controller;

 

import java.sql.ResultSet;

import java.sql.SQLException;

 

import javax.annotation.Resource;

 

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.jdbc.core.RowMapper;

import org.springframework.kafka.core.KafkaTemplate;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

 

import com.alibaba.dubbo.config.annotation.Reference;

import com.example.demo.service.HelloService;

 

import net.oschina.j2cache.CacheChannel;

 

@RestController

@RequestMapping("demo")

public class HelloController

{

    @Resource

    private JdbcTemplate jdbcTemplate;

    

    @Reference

    private HelloService helloService;

    

    @Resource

    private CacheChannel cacheChannel;

    

    @Resource

    private KafkaTemplate<String, String> kafkaTemplate;

    

    @RequestMapping("hello")

    public String hello(String username)

    {

        System.err.println("╭-------------------------------------------╮");

        System.err.println("│                  进入boot控制层                                           │");

        System.err.println("╰-------------------------------------------╯");

        //发送消息到队列

        kafkaTemplate.send("lp-test", username);

        //获取缓存

        Object object = cacheChannel.get("default", username).getValue();

        if(null != object)

        {

            String name = (String)object;

            return "Hello world j2cache " + name;

        }

        

        String sql = "select name from t_account where account like '%" + username + "%'";

        String name = jdbcTemplate.queryForObject(sql, new RowMapper<String>() {

            @Override

            public String mapRow(ResultSet rs, int rowNum) throws SQLException {

                return rs.getString("name");

            }

        });

        //调用dubbo服务

        helloService.hello(name);

        //设置缓存

        cacheChannel.set("default", username, name);

        return "Hello world " + name;

    }

}

 

 

application.properties

server.port=8089

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test

spring.datasource.username=root

spring.datasource.password=root

dubbo.application.name=hello-world

dubbo.registry.address=zookeeper://127.0.0.1:2181

dubbo.scan.basePackages=com.example.demo.service

j2cache.config-location=/j2cache.properties

spring.kafka.bootstrap-servers=127.0.0.1:9092

spring.kafka.consumer.group-id=test-customer-group

 

j2cache.properties

j2cache.broadcast = redis

 

j2cache.L1.provider_class = caffeine

j2cache.L2.provider_class = redis

 

j2cache.sync_ttl_to_redis = true

 

j2cache.default_cache_null_object = true

 

j2cache.serialization = json

 

caffeine.properties = /caffeine.properties

 

redis.mode = single

 

redis.storage = generic

 

redis.channel = j2cache

 

redis.channel.host =

 

redis.cluster_name = j2cache

 

redis.namespace =

 

redis.hosts = 127.0.0.1:6379

redis.timeout = 2000

redis.password = 9527

redis.database = 0

 

## redis pool properties

redis.maxTotal = 100

redis.maxIdle = 10

redis.maxWaitMillis = 5000

redis.minEvictableIdleTimeMillis = 60000

redis.minIdle = 1

redis.numTestsPerEvictionRun = 10

redis.lifo = false

redis.softMinEvictableIdleTimeMillis = 10

redis.testOnBorrow = true

redis.testOnReturn = false

redis.testWhileIdle = true

redis.timeBetweenEvictionRunsMillis = 300000

redis.blockWhenExhausted = false

redis.jmxEnabled = false

 

caffeine.properties

#########################################

# Caffeine configuration

# [name] = size, xxxx[s|m|h|d]

#########################################

 

default = 1000, 30m 

主工程pom

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

 

<groupId>com.example</groupId>

<artifactId>HelloBoot</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>jar</packaging>

 

<name>HelloBoot</name>

<description>Demo project for Spring Boot</description>

 

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.0.5.RELEASE</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>

 

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<java.version>1.8</java.version>

</properties>

 

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter</artifactId>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid-spring-boot-starter</artifactId>

<version>1.1.10</version>

</dependency>

<dependency>

    <groupId>com.alibaba.boot</groupId>

    <artifactId>dubbo-spring-boot-starter</artifactId>

    <version>0.2.0</version>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

 

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-jdbc</artifactId>

</dependency>

 

<dependency>

    <groupId>mysql</groupId>

    <artifactId>mysql-connector-java</artifactId>

</dependency>

 

<dependency>

<groupId>com.example</groupId>

<artifactId>HelloDubbo</artifactId>

<version>0.0.1-SNAPSHOT</version>

</dependency>

 

<dependency>

    <groupId>net.oschina.j2cache</groupId>

    <artifactId>j2cache-spring-boot2-starter</artifactId>

    <version>2.5.5-release</version>

</dependency>

 

<dependency>

    <groupId>org.springframework.data</groupId>

    <artifactId>spring-data-redis</artifactId>

</dependency>

 

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

 

<dependency>

    <groupId>org.springframework.kafka</groupId>

    <artifactId>spring-kafka</artifactId>

</dependency>

 

 

</dependencies>

 

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>

 

 

</project>

 

 

Dubbo服务端:

package com.example.demo.service;

 

public interface HelloService

{

    String hello(String name);

}

 

 

package com.example.demo.service.impl;

 

import com.alibaba.dubbo.config.annotation.Service;

import com.example.demo.service.HelloService;

 

@Service()

public class HelloServiceImpl implements HelloService

{

 

    @Override

    public String hello(String name)

    {

        System.err.println("╭-------------------------------------------╮");

        System.err.println("│                  调用dubbo服务                                            │");

        System.err.println("╰-------------------------------------------╯");

        return "dubbo" + name;

    }

 

}

 

 

 

package com.example.demo.service;

 

import org.springframework.kafka.annotation.KafkaListener;

import org.springframework.stereotype.Component;

 

@Component

public class CustomerKafka

{

    @KafkaListener(topics = "lp-test")

    public void hello(String data)

    {

        System.err.println("╭-------------------------------------------╮");

        System.err.println("│                  kafka监听消费                                            │");

        System.err.println("╰-------------------------------------------╯");

        System.err.println(data);

    }

}

 

 

application.properties

dubbo.application.name=hello-dubbo

dubbo.protocol.name=dubbo

dubbo.protocol.port=28000

dubbo.registry.address=zookeeper://127.0.0.1:2181

dubbo.scan.basePackages=com.example.demo.service

spring.kafka.bootstrap-servers=127.0.0.1:9092

spring.kafka.consumer.group-id=test-customer-group

 

Dubbo服务端pom

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

 

<groupId>com.example</groupId>

<artifactId>HelloDubbo</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>jar</packaging>

 

<name>HelloDubbo</name>

<description>Demo project for Spring Boot</description>

 

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.0.5.RELEASE</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>

 

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<java.version>1.8</java.version>

</properties>

 

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter</artifactId>

</dependency>

 

<dependency>

<groupId>com.alibaba.boot</groupId>

<artifactId>dubbo-spring-boot-starter</artifactId>

<version>0.2.0</version>

</dependency>

 

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

 

<dependency>

    <groupId>org.springframework.kafka</groupId>

    <artifactId>spring-kafka</artifactId>

</dependency>

 

</dependencies>

 

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>

 

 

</project>

 

 

 

CREATE TABLE `t_account` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `account` varchar(255) DEFAULT NULL,

  `password` varchar(255) DEFAULT NULL,

  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,

  `create_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,

  PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

 

-- ----------------------------

-- Records of t_account

-- ----------------------------

INSERT INTO t_account VALUES ('1', '9527', 'e10adc3949ba59abbe56e057f20f883e', '周星星', '2018-09-14 11:03:48');

 

标签:
来源: https://blog.csdn.net/qq_30920479/article/details/82700538

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有