semaphore = redisson.getSemaphore(suffixName(getName(), "semaphore")); listenerId = topic.addListener(Long.class, new MessageListener<Long>() {
semaphore = redisson.getSemaphore(suffixName(getName(), "semaphore")); listenerId = topic.addListener(Long.class, new MessageListener<Long>() {
/** * get named semaphore * * @param name * @return */ public RSemaphore getSemaphore(String name) { RSemaphore semaphore = redissonClient.getSemaphore(name); semaphore.trySetPermits(1); return semaphore; } }
/** * get named semaphore * * @param name * @return */ public RSemaphore getSemaphore(String name) { RSemaphore semaphore = redissonClient.getSemaphore(name); semaphore.trySetPermits(1); return semaphore; } }
@Override public void release(Object key, int permits) { RSemaphore rSemaphore = redisson.getSemaphore(key.toString()); rSemaphore.release(); }
@Override public boolean acquire(Object key, int permits) { RSemaphore rSemaphore = redisson.getSemaphore(key.toString()); rSemaphore.trySetPermits(permits); return rSemaphore.tryAcquire(); }
private void waitFor(String uuid, int subscribers) { RSemaphore semaphore = redissonClient.getSemaphore(String.format(JobConfig.WORKER_REQ, uuid)); try { semaphore.tryAcquire(subscribers, 10L, TimeUnit.SECONDS); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } redissonClient.getKeys().delete(semaphore); }
@Override public void run() { RSemaphore s = redisson.getSemaphore("test"); s.release(); s.release(); } };
@Override @SneakyThrows public Lock tryGetLock(String lockName, long timeout, TimeUnit timeUnit) { String id = IdUtils.newUUID(); RSemaphore semaphore = rSemaphoreMap.computeIfAbsent(lockName, key -> { RSemaphore rSemaphore = redissonClient.getSemaphore(key); rSemaphore.trySetPermits(1); return rSemaphore; }); log.debug("try lock {} permits:{},id={}", lockName, semaphore.availablePermits(), id); boolean success = semaphore.tryAcquire(timeout, timeUnit); if (!success) { throw new TimeoutException("try lock " + lockName + " timeout"); } return () -> { semaphore.release(); log.debug("unlock {},id={}", lockName, id); }; }
public static void main(String[] args) throws InterruptedException { // connects to 127.0.0.1:6379 by default RedissonClient redisson = Redisson.create(); RSemaphore s = redisson.getSemaphore("test"); s.trySetPermits(5); s.acquire(3); Thread t = new Thread() { @Override public void run() { RSemaphore s = redisson.getSemaphore("test"); s.release(); s.release(); } }; t.start(); s.acquire(4); redisson.shutdown(); }
@Override public void register() { List<JobGroup> jobGroups = jobExecutor.getGroups(); if (jobGroups == null || jobGroups.isEmpty()) { log.info("no jobs need to register"); return; } // 注册job执行器 for (JobGroup jobGroup : jobGroups) { String key = String .format(JobConfig.JOB_BEAN_CHANNEL, jobGroup.getGroupKey(), jobGroup.getJobKey()); log.info("register job [{}]", key); redissonClient.getExecutorService(key).registerWorkers(JobConfig.getParallel()); } // script执行器 if (JobConfig.getExecutor().getScriptJobEnabled()) { redissonClient.getExecutorService(String.format(JobConfig.JOB_SCRIPT_CHANNEL, "")) .registerWorkers(JobConfig.getParallel()); redissonClient .getExecutorService(String.format(JobConfig.JOB_SCRIPT_CHANNEL, jobExecutor.getKey())) .registerWorkers(JobConfig.getParallel()); } // 订阅worker redissonClient.<String>getTopic(JobConfig.WORKER_REGISTER).addListener((channel, uuid) -> { redissonClient.getMapCache(String.format(JobConfig.WORKER_REQ_VAL, uuid)) .put(jobExecutor.getId(), jobExecutor, 20, TimeUnit.SECONDS); redissonClient.getSemaphore(String.format(JobConfig.WORKER_REQ, uuid)).release(); }); }
semaphore = redisson.getSemaphore(suffixName(getName(), "semaphore")); listenerId = topic.addListener(Long.class, new MessageListener<Long>() {