标签:
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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。