Skip to content

Instantly share code, notes, and snippets.

View sonus21's full-sized avatar

Sonu Kumar sonus21

View GitHub Profile
@sonus21
sonus21 / MessageListener.java
Last active May 13, 2021 12:04
Message Listener
import com.github.sonus21.rqueue.annotation.RqueueListener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class MessageListener {
@RqueueListener(value = "${email.queue.name}")
public void sendEmail(Email email) {
@sonus21
sonus21 / Email.java
Last active November 3, 2019 06:46
Email
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Email {
private String email;
private String subject;
@sonus21
sonus21 / Invoice.java
Last active November 3, 2019 06:45
Invoice
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Invoice {
private String id;
private String type;
@sonus21
sonus21 / Controller.java
Last active May 13, 2021 11:57
Controller
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@Slf4j
public class Controller {
private @NonNull RqueueMessageEnqueuer rqueueMessageEnqueuer;
@Value("${email.queue.name}")
private String emailQueueName;
@Value("${invoice.queue.name}")
@sonus21
sonus21 / application.properties
Created November 3, 2019 06:44
application.properties
email.queue.name=email-queue
invoice.queue.name=invoice-queue
# 30 seconds delay for invoice
invoice.queue.delay=300000
@sonus21
sonus21 / build.gradle
Created November 5, 2019 17:09
Micrometer dependencies
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
implementation 'io.micrometer:micrometer-registry-prometheus'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
// https://mvnrepository.com/artifact/com.h2database/h2
compile group: 'com.h2database', name: 'h2', version: '1.4.200'
@sonus21
sonus21 / application.properties
Last active November 8, 2019 04:37
Enable Prometheus In Spring boot app
# Enable prometheus exporter
management.metrics.export.prometheus.enabled=true
# Enable prometheus end point
management.endpoints.web.exposure.include=prometheus
# enable percentile-based histogram for http requests
management.metrics.distribution.percentiles-histogram.http.server.requests=true
# http SLA histogram buckets
management.metrics.distribution.sla.http.server.requests=100ms,150ms,250ms,500ms,1s
# enable JVM metrics
management.metrics.enable.jvm=true
@sonus21
sonus21 / StockManager.java
Last active November 9, 2019 07:42
Promeheus counter and Gauge example
@Component
public class StockManager {
@Autowired private MeterRegistry meterRegistry;
private List<String> orders = new Vector<>();
private Counter counter;
private Gauge gauge;
@PostConstruct
public void init() {
counter =
@sonus21
sonus21 / StockController.java
Last active November 9, 2019 07:43
Stock controller
@RestController
@RequestMapping(path = "stocks")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class StockController {
@NonNull private StockManager stockManager;
@GetMapping
@ResponseBody
public List<String> getItems(@RequestParam int size) {
return stockManager.getItem(size);
@sonus21
sonus21 / ControllerProfiler.java
Last active November 8, 2019 19:39
ControllerProfiler for spring app
@Aspect
@Component
public class ControllerProfiler {
private static Map<String, Object> timedAnnotationData = new HashMap<>();
static {
// use percentile data of p90, p95, p99.99
double[] percentiles = {0.90, 0.95, 0.9999};
// set histogram to true
timedAnnotationData.put("histogram", true);