Это упрощенная система быстрых продаж, основанная на nodejs, redis, zookeeper, kafka и mysql.
2. Зависимости Node.js! Здесь можно вставить изображение3. seckillService.js
Обрабатывает запросы на сейлкилл и отправляет результаты сейлкилла вместе с информацией о пользователе через producer Kafka.
var express = require("express"),
redis = require("redis"),
kafka = require('kafka-node'),
Producer = kafka.Producer,
kafkaClient = new kafka.Client(),
producer = new Producer(kafkaClient);
count = 0;
app = express();
config = require(". /config/redis.json");
var bodyParser = require('body-parser');
app.use(express.json());
app.use(bodyParser.json({limit: '1mb'})); //body-parser парсит данные в формате JSON
app.use(bodyParser.urlencoded({ //эта настройка обязательна после bodyParser.json для кодирования параметров
extended: true
}));
app.all("*", function (req, res, next) {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With, yourHeaderFeild');
res.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
res.setHeader("X-Powered-By",' 3. 2. 1');
next();
});
app.post('/seckill', function(req, res) {
console.log('count=' + count++);
let fn = function(optionalClient) {
let client;
if (optionalClient == 'undefined' || optionalClient == null) {
client = redis.createClient(config);
} else {
client = optionalClient;
}
client.on('error', function(er) {
console.error(er.stack);
client.end(true);
});
client.watch("counter"); //наблюдение за полем counter
client.get("counter", function(err, reply) {
if (parseInt(reply) > 0) {
let multi = client.multi();
multi.decr('counter'); //обновление значения counter в Redis на -1
multi.exec(function(err, replies) {
if (replies == null) { //поле counter используется, ожидаем освобождения
console.```log("counter используется");
fn(client);
} else {
var args = {
openid: 'b05NZ2Y1WjbE9fRV9MZTBWWQ==',
seckillTime: '2018-12-12 00:00:01',
}
let payload = [{
topic: 'PROUDCT_NUMBER',
messages: [JSON.stringify(args)],
key: "seckill",
``````markdown
partition:0
];
console.log("payload:",payload);
producer.send(payload,function(err,data){
console.log(data);
});
res.send(replies);
client.end(true);
``````markdown
} else {
console.log("Товары закончились");
res.send("Товары закончились");
client.end(true);
}
});
}
fn(null);
});
app.listen(8888, "0.0.0.0", function () {
console.log(`Пожалуйста, подключите connectorServer по адресу http://localhost:8888`);
});
```javascript
var kafka = require('kafka-node'),
Consumer = kafka.Consumer,
client = new kafka.Client(),
consumer = new Consumer(
client,
[
{topic: 'CAR_NUMBER', partition: 0}
],
{
autoCommit: false,
fetchMaxWaitMs: 1000,
fetchMaxBytes: 1024 * 1024,
fromOffset: true
}
);
var mysql = require('mysql');
var connection = mysql.createConnection({
"host": "**.***.***.**",
"user": "root",
"password": "password",
"database": "seckill"
});
connection.connect();
consumer.on('message', function (message) {
console.log("Полученные данные от производителя:", message);
let value = JSON.parse(message.value);
connection.query('insert into seckill set ? ', {date: new Date(), uid: value.openid}, function (error, results, fields) {
if (error) {
console.error(error);
}
console.log("Успешное внесение данных в базу");
});
})
4. Разверните проект на облачном сервере.
5. Перейдите в корневую директорию проекта и запустите seckillService.js и seckill_kafka_consumer.js. Я использую pm2 для управления этими двумя службами.
#### Пятый раздел: Тестирование
Откройте Postman, как показано на рисунке:
Сначала сохраните этот URL в файл, а затем нажмите кнопку Runner.
Как показано на рисунке:

Вы можете использовать POST запрос: http://seckill.ykplay.com/seckill для тестирования.
```Информация для печати сервера```
seckillService.js

seckill_kafka_consumer.js

Эти данные подтверждают успешную реализацию функции секционирования.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )